From 280cc01ee8fedd599442eb67e28046f6d7f18777 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Mon, 13 Jun 2022 11:36:31 -0400 Subject: [PATCH 01/20] storybook fix --- packages/hyperverse-evm-erc721/stories/approve.stories.tsx | 2 +- packages/hyperverse-evm-erc721/stories/getBalanceOf.stories.tsx | 2 +- packages/hyperverse-evm-erc721/stories/getOwnerOf.stories.tsx | 2 +- packages/hyperverse-evm-erc721/stories/mint.stories.tsx | 2 +- .../hyperverse-evm-erc721/stories/setApprovalForAll.stories.tsx | 2 +- .../hyperverse-evm-erc721/stories/togglePublicMint.stories.tsx | 2 +- packages/hyperverse-evm-erc721/stories/transfer.stories.tsx | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/hyperverse-evm-erc721/stories/approve.stories.tsx b/packages/hyperverse-evm-erc721/stories/approve.stories.tsx index 815c8d2b..674eb2c1 100644 --- a/packages/hyperverse-evm-erc721/stories/approve.stories.tsx +++ b/packages/hyperverse-evm-erc721/stories/approve.stories.tsx @@ -1,7 +1,7 @@ import { Approve } from './approve'; import { HyperverseProvider } from './utils/Provider'; import React from 'react'; -import Doc from '../docs/approve.mdx'; +import { Doc } from '../docs/approve.mdx'; export default { title: 'Components/Approve', diff --git a/packages/hyperverse-evm-erc721/stories/getBalanceOf.stories.tsx b/packages/hyperverse-evm-erc721/stories/getBalanceOf.stories.tsx index f4518cf1..662a3b35 100644 --- a/packages/hyperverse-evm-erc721/stories/getBalanceOf.stories.tsx +++ b/packages/hyperverse-evm-erc721/stories/getBalanceOf.stories.tsx @@ -1,7 +1,7 @@ import { GetBalanceOf } from './getBalanceOf'; import { HyperverseProvider } from './utils/Provider'; import React from 'react'; -import Doc from '../docs/getBalanceOf.mdx'; +import { Doc } from '../docs/getBalanceOf.mdx'; export default { title: 'Components/GetBalanceOf', diff --git a/packages/hyperverse-evm-erc721/stories/getOwnerOf.stories.tsx b/packages/hyperverse-evm-erc721/stories/getOwnerOf.stories.tsx index 0a8341d7..bd532d2f 100644 --- a/packages/hyperverse-evm-erc721/stories/getOwnerOf.stories.tsx +++ b/packages/hyperverse-evm-erc721/stories/getOwnerOf.stories.tsx @@ -1,7 +1,7 @@ import { GetOwnerOf } from './getOwnerOf'; import { HyperverseProvider } from './utils/Provider'; import React from 'react'; -import Doc from '../docs/getOwnerOf.mdx'; +import { Doc } from '../docs/getOwnerOf.mdx'; export default { title: 'Components/GetOwnerOf', diff --git a/packages/hyperverse-evm-erc721/stories/mint.stories.tsx b/packages/hyperverse-evm-erc721/stories/mint.stories.tsx index 0bed320a..fab22305 100644 --- a/packages/hyperverse-evm-erc721/stories/mint.stories.tsx +++ b/packages/hyperverse-evm-erc721/stories/mint.stories.tsx @@ -1,7 +1,7 @@ import { Mint } from './mint'; import { HyperverseProvider } from './utils/Provider'; import React from 'react'; -import Doc from '../docs/mint.mdx'; +import { Doc } from '../docs/mint.mdx'; export default { title: 'Components/Mint', diff --git a/packages/hyperverse-evm-erc721/stories/setApprovalForAll.stories.tsx b/packages/hyperverse-evm-erc721/stories/setApprovalForAll.stories.tsx index 851bcedf..3ba10a07 100644 --- a/packages/hyperverse-evm-erc721/stories/setApprovalForAll.stories.tsx +++ b/packages/hyperverse-evm-erc721/stories/setApprovalForAll.stories.tsx @@ -1,7 +1,7 @@ import { ApproveAll } from './setApprovalForAll'; import { HyperverseProvider } from './utils/Provider'; import React from 'react'; -import Doc from '../docs/setApprovalForAll.mdx'; +import { Doc } from '../docs/setApprovalForAll.mdx'; export default { title: 'Components/ApproveAll', diff --git a/packages/hyperverse-evm-erc721/stories/togglePublicMint.stories.tsx b/packages/hyperverse-evm-erc721/stories/togglePublicMint.stories.tsx index f34dfc95..f7adbe11 100644 --- a/packages/hyperverse-evm-erc721/stories/togglePublicMint.stories.tsx +++ b/packages/hyperverse-evm-erc721/stories/togglePublicMint.stories.tsx @@ -1,7 +1,7 @@ import { TogglePublicMint } from './togglePublicMint'; import { HyperverseProvider } from './utils/Provider'; import React from 'react'; -import Doc from '../docs/togglePublicMint.mdx'; +import { Doc } from '../docs/togglePublicMint.mdx'; export default { title: 'Components/TogglePublicMint', diff --git a/packages/hyperverse-evm-erc721/stories/transfer.stories.tsx b/packages/hyperverse-evm-erc721/stories/transfer.stories.tsx index c0cd53e1..99757171 100644 --- a/packages/hyperverse-evm-erc721/stories/transfer.stories.tsx +++ b/packages/hyperverse-evm-erc721/stories/transfer.stories.tsx @@ -1,7 +1,7 @@ import { Transfer } from './transfer'; import { HyperverseProvider } from './utils/Provider'; import React from 'react'; -import Doc from '../docs/transfer.mdx'; +import { Doc } from '../docs/transfer.mdx'; export default { title: 'Components/Transfer', From 034e67639ffd15cb1b8c07e28ab0453884f7d135 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Mon, 13 Jun 2022 17:16:17 -0400 Subject: [PATCH 02/20] update contract --- .../contracts/ERC721.sol/ERC721.json | 44 +- .../ERC721Factory.sol/ERC721Factory.json | 4 +- packages/hyperverse-evm-erc721/contracts.json | 4 +- .../contracts/ERC721.sol | 1307 ++++++++--------- 4 files changed, 693 insertions(+), 666 deletions(-) diff --git a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json index 1526d480..6aa05c77 100644 --- a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json +++ b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json @@ -350,9 +350,21 @@ "type": "function" }, { - "inputs": [], + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], "name": "mint", - "outputs": [], + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], "stateMutability": "payable", "type": "function" }, @@ -554,6 +566,30 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "string", + "name": "_uri", + "type": "string" + } + ], + "name": "tenantMint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { @@ -617,8 +653,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b50604051620038dd380380620038dd83398181016040528101906200003791906200040c565b60016000819055506040518060a001604052806040518060400160405280600681526020017f4552433732310000000000000000000000000000000000000000000000000000815250815260200160405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c6c696e6b2e6e6574000000000000000081525081525081526020016040518060400160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250815260200165032a361e860667ffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c4c696e6b2e6e657400000000000000008152508152506002600082015181600001908051906020019062000194929190620002b4565b5060208201518160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906200020392919062000345565b505050604082015181600301908051906020019062000224929190620002b4565b5060608201518160040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550608082015181600501908051906020019062000272929190620002b4565b509050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050620004eb565b828054620002c2906200046c565b90600052602060002090601f016020900481019282620002e6576000855562000332565b82601f106200030157805160ff191683800117855562000332565b8280016001018555821562000332579182015b828111156200033157825182559160200191906001019062000314565b5b509050620003419190620003d6565b5090565b82805462000353906200046c565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b6000815190506200040681620004d1565b92915050565b6000602082840312156200041f57600080fd5b60006200042f84828501620003f5565b91505092915050565b600062000445826200044c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048557607f821691505b602082108114156200049c576200049b620004a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620004dc8162000438565b8114620004e857600080fd5b50565b60805160601c6133d36200050a600039600061164801526133d36000f3fe6080604052600436106101815760003560e01c806355f804b3116100d1578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd1461053b578063ce606ee014610578578063e985e9c5146105a3578063f4a0a528146105e057610181565b8063a035b1fe146104be578063a22cb465146104e9578063b88d4fde1461051257610181565b806355f804b31461039c5780635aca1bb6146103c55780636352211e146103ee57806370a082311461042b578063714c53981461046857806395d89b411461049357610181565b80631e84c4131161013e578063392f37e911610118578063392f37e9146103045780633ccfd60b1461033357806342842e0e1461034a57806349df728c1461037357610181565b80631e84c41314610287578063217cc2b4146102b257806323b872dd146102db57610181565b806301ffc9a71461018657806306fdde03146101c3578063077f224a146101ee578063081812fc14610217578063095ea7b3146102545780631249c58b1461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a8919061295b565b610609565b6040516101ba9190612d55565b60405180910390f35b3480156101cf57600080fd5b506101d86106eb565b6040516101e59190612dfa565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190612a17565b61077d565b005b34801561022357600080fd5b5061023e60048036038101906102399190612a96565b610904565b60405161024b9190612cc5565b60405180910390f35b34801561026057600080fd5b5061027b600480360381019061027691906128cd565b61094a565b005b610285610a53565b005b34801561029357600080fd5b5061029c610b45565b6040516102a99190612d55565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190612762565b610b58565b005b3480156102e757600080fd5b5061030260048036038101906102fd91906127c7565b610bf3565b005b34801561031057600080fd5b50610319610c4a565b60405161032a959493929190612d70565b60405180910390f35b34801561033f57600080fd5b50610348610f0c565b005b34801561035657600080fd5b50610371600480360381019061036c91906127c7565b610fe2565b005b34801561037f57600080fd5b5061039a600480360381019061039591906129ad565b611002565b005b3480156103a857600080fd5b506103c360048036038101906103be91906129d6565b6111a8565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190612909565b611249565b005b3480156103fa57600080fd5b5061041560048036038101906104109190612a96565b6112ed565b6040516104229190612cc5565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190612762565b611396565b60405161045f9190612e5c565b60405180910390f35b34801561047457600080fd5b5061047d611445565b60405161048a9190612dfa565b60405180910390f35b34801561049f57600080fd5b506104a86114d7565b6040516104b59190612dfa565b60405180910390f35b3480156104ca57600080fd5b506104d3611569565b6040516104e09190612e5c565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190612891565b61156f565b005b34801561051e57600080fd5b5061053960048036038101906105349190612816565b611585565b005b34801561054757600080fd5b50610562600480360381019061055d9190612a96565b6115de565b60405161056f9190612dfa565b60405180910390f35b34801561058457600080fd5b5061058d611646565b60405161059a9190612cc5565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c5919061278b565b61166a565b6040516105d79190612d55565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190612a96565b6116fe565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e457506106e38261178f565b5b9050919050565b6060600b80546106fa90613108565b80601f016020809104026020016040519081016040528092919081815260200182805461072690613108565b80156107735780601f1061074857610100808354040283529160200191610773565b820191906000526020600020905b81548152906001019060200180831161075657829003601f168201915b5050505050905090565b600061078960016117f9565b905080156107ac5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610835576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b908051906020019061084b929190612547565b5083600c9080519060200190610862929190612547565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156108fe5760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516108f59190612ddf565b60405180910390a15b50505050565b600061090f826118eb565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610955826112ed565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109bd576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109dc61192d565b73ffffffffffffffffffffffffffffffffffffffff16141580610a0d5750610a0b81610a0661192d565b61166a565b155b15610a44576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4e8383611935565b505050565b60026000541415610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090612e3c565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff1615151415610aef576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e543414610b2a576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b3b33610b366119ee565b611a09565b6001600081905550565b600f60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bdf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf081610beb6119ee565b611a09565b50565b610c04610bfe61192d565b82611a27565b610c3a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c45838383611abc565b505050565b6002806000018054610c5b90613108565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8790613108565b8015610cd45780601f10610ca957610100808354040283529160200191610cd4565b820191906000526020600020905b815481529060010190602001808311610cb757829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610d4f90613108565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7b90613108565b8015610dc85780601f10610d9d57610100808354040283529160200191610dc8565b820191906000526020600020905b815481529060010190602001808311610dab57829003601f168201915b50505050508152505090806003018054610de190613108565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0d90613108565b8015610e5a5780601f10610e2f57610100808354040283529160200191610e5a565b820191906000526020600020905b815481529060010190602001808311610e3d57829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610e8990613108565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590613108565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f93576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fde573d6000803e3d6000fd5b5050565b610ffd83838360405180602001604052806000815250611585565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611089576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110c49190612cc5565b60206040518083038186803b1580156110dc57600080fd5b505afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190612abf565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611151929190612d2c565b602060405180830381600087803b15801561116b57600080fd5b505af115801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190612932565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461122f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d9080519060200190611245929190612547565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561138d576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113fe576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d805461145490613108565b80601f016020809104026020016040519081016040528092919081815260200182805461148090613108565b80156114cd5780601f106114a2576101008083540402835291602001916114cd565b820191906000526020600020905b8154815290600101906020018083116114b057829003601f168201915b5050505050905090565b6060600c80546114e690613108565b80601f016020809104026020016040519081016040528092919081815260200182805461151290613108565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b5050505050905090565b600e5481565b61158161157a61192d565b8383611d11565b5050565b61159661159061192d565b83611a27565b6115cc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115d884848484611edc565b50505050565b60606115e9826118eb565b60006115f3611f2f565b90506000815111611613576040518060200160405280600081525061163e565b8061161d84611f46565b60405160200161162e929190612ca1565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611785576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff161561186f5760018260ff161480156118275750611825306120f3565b155b611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90612e1c565b60405180910390fd5b600090506118e6565b8160ff16600160009054906101000a900460ff1660ff16106118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90612e1c565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b6118f481612106565b61192a576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119a8836112ed565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119fa600a612172565b611a04600a612188565b905090565b611a23828260405180602001604052806000815250612196565b5050565b600080611a33836112ed565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a755750611a74818561166a565b5b80611ab357508373ffffffffffffffffffffffffffffffffffffffff16611a9b84610904565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611adc826112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611b29576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b90576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9b8383836121e8565b611ba6600082611935565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bf69190612fd9565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c4d9190612f52565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d0c8383836121ed565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d78576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dde576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ecf9190612d55565b60405180910390a3505050565b611ee7848484611abc565b611ef3848484846121f2565b611f29576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415611f8e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120ee565b600082905060005b60008214611fc0578080611fa99061316b565b915050600a82611fb99190612fa8565b9150611f96565b60008167ffffffffffffffff811115612002577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120345781602001600182028036833780820191505090505b5090505b600085146120e75760018261204d9190612fd9565b9150600a8561205c91906131b4565b60306120689190612f52565b60f81b8183815181106120a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120e09190612fa8565b9450612038565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6121a08383612380565b6121ad60008484846121f2565b6121e3576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b60006122138473ffffffffffffffffffffffffffffffffffffffff166120f3565b15612373578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261223c61192d565b8786866040518563ffffffff1660e01b815260040161225e9493929190612ce0565b602060405180830381600087803b15801561227857600080fd5b505af19250505080156122a957506040513d601f19601f820116820180604052508101906122a69190612984565b60015b612323573d80600081146122d9576040519150601f19603f3d011682016040523d82523d6000602084013e6122de565b606091505b5060008151141561231b576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612378565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123f081612106565b15612426576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612432600083836121e8565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124829190612f52565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612543600083836121ed565b5050565b82805461255390613108565b90600052602060002090601f01602090048101928261257557600085556125bc565b82601f1061258e57805160ff19168380011785556125bc565b828001600101855582156125bc579182015b828111156125bb5782518255916020019190600101906125a0565b5b5090506125c991906125cd565b5090565b5b808211156125e65760008160009055506001016125ce565b5090565b60006125fd6125f884612e9c565b612e77565b90508281526020810184848401111561261557600080fd5b6126208482856130c6565b509392505050565b600061263b61263684612ecd565b612e77565b90508281526020810184848401111561265357600080fd5b61265e8482856130c6565b509392505050565b6000813590506126758161332a565b92915050565b60008135905061268a81613341565b92915050565b60008151905061269f81613341565b92915050565b6000813590506126b481613358565b92915050565b6000815190506126c981613358565b92915050565b600082601f8301126126e057600080fd5b81356126f08482602086016125ea565b91505092915050565b6000813590506127088161336f565b92915050565b600082601f83011261271f57600080fd5b813561272f848260208601612628565b91505092915050565b60008135905061274781613386565b92915050565b60008151905061275c81613386565b92915050565b60006020828403121561277457600080fd5b600061278284828501612666565b91505092915050565b6000806040838503121561279e57600080fd5b60006127ac85828601612666565b92505060206127bd85828601612666565b9150509250929050565b6000806000606084860312156127dc57600080fd5b60006127ea86828701612666565b93505060206127fb86828701612666565b925050604061280c86828701612738565b9150509250925092565b6000806000806080858703121561282c57600080fd5b600061283a87828801612666565b945050602061284b87828801612666565b935050604061285c87828801612738565b925050606085013567ffffffffffffffff81111561287957600080fd5b612885878288016126cf565b91505092959194509250565b600080604083850312156128a457600080fd5b60006128b285828601612666565b92505060206128c38582860161267b565b9150509250929050565b600080604083850312156128e057600080fd5b60006128ee85828601612666565b92505060206128ff85828601612738565b9150509250929050565b60006020828403121561291b57600080fd5b60006129298482850161267b565b91505092915050565b60006020828403121561294457600080fd5b600061295284828501612690565b91505092915050565b60006020828403121561296d57600080fd5b600061297b848285016126a5565b91505092915050565b60006020828403121561299657600080fd5b60006129a4848285016126ba565b91505092915050565b6000602082840312156129bf57600080fd5b60006129cd848285016126f9565b91505092915050565b6000602082840312156129e857600080fd5b600082013567ffffffffffffffff811115612a0257600080fd5b612a0e8482850161270e565b91505092915050565b600080600060608486031215612a2c57600080fd5b600084013567ffffffffffffffff811115612a4657600080fd5b612a528682870161270e565b935050602084013567ffffffffffffffff811115612a6f57600080fd5b612a7b8682870161270e565b9250506040612a8c86828701612666565b9150509250925092565b600060208284031215612aa857600080fd5b6000612ab684828501612738565b91505092915050565b600060208284031215612ad157600080fd5b6000612adf8482850161274d565b91505092915050565b612af18161300d565b82525050565b612b008161300d565b82525050565b612b0f8161301f565b82525050565b6000612b2082612efe565b612b2a8185612f14565b9350612b3a8185602086016130d5565b612b43816132a1565b840191505092915050565b612b57816130b4565b82525050565b6000612b6882612f09565b612b728185612f25565b9350612b828185602086016130d5565b612b8b816132a1565b840191505092915050565b6000612ba182612f09565b612bab8185612f36565b9350612bbb8185602086016130d5565b612bc4816132a1565b840191505092915050565b6000612bda82612f09565b612be48185612f47565b9350612bf48185602086016130d5565b80840191505092915050565b6000612c0d602e83612f36565b9150612c18826132b2565b604082019050919050565b6000612c30601f83612f36565b9150612c3b82613301565b602082019050919050565b6000604083016000830151612c5e6000860182612ae8565b5060208301518482036020860152612c768282612b5d565b9150508091505092915050565b612c8c81613089565b82525050565b612c9b81613093565b82525050565b6000612cad8285612bcf565b9150612cb98284612bcf565b91508190509392505050565b6000602082019050612cda6000830184612af7565b92915050565b6000608082019050612cf56000830187612af7565b612d026020830186612af7565b612d0f6040830185612c83565b8181036060830152612d218184612b15565b905095945050505050565b6000604082019050612d416000830185612af7565b612d4e6020830184612c83565b9392505050565b6000602082019050612d6a6000830184612b06565b92915050565b600060a0820190508181036000830152612d8a8188612b15565b90508181036020830152612d9e8187612c46565b90508181036040830152612db28186612b15565b9050612dc16060830185612c92565b8181036080830152612dd38184612b15565b90509695505050505050565b6000602082019050612df46000830184612b4e565b92915050565b60006020820190508181036000830152612e148184612b96565b905092915050565b60006020820190508181036000830152612e3581612c00565b9050919050565b60006020820190508181036000830152612e5581612c23565b9050919050565b6000602082019050612e716000830184612c83565b92915050565b6000612e81612e92565b9050612e8d828261313a565b919050565b6000604051905090565b600067ffffffffffffffff821115612eb757612eb6613272565b5b612ec0826132a1565b9050602081019050919050565b600067ffffffffffffffff821115612ee857612ee7613272565b5b612ef1826132a1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f5d82613089565b9150612f6883613089565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f9d57612f9c6131e5565b5b828201905092915050565b6000612fb382613089565b9150612fbe83613089565b925082612fce57612fcd613214565b5b828204905092915050565b6000612fe482613089565b9150612fef83613089565b925082821015613002576130016131e5565b5b828203905092915050565b600061301882613069565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006130628261300d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006130bf826130a7565b9050919050565b82818337600083830152505050565b60005b838110156130f35780820151818401526020810190506130d8565b83811115613102576000848401525b50505050565b6000600282049050600182168061312057607f821691505b6020821081141561313457613133613243565b5b50919050565b613143826132a1565b810181811067ffffffffffffffff8211171561316257613161613272565b5b80604052505050565b600061317682613089565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131a9576131a86131e5565b5b600182019050919050565b60006131bf82613089565b91506131ca83613089565b9250826131da576131d9613214565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6133338161300d565b811461333e57600080fd5b50565b61334a8161301f565b811461335557600080fd5b50565b6133618161302b565b811461336c57600080fd5b50565b61337881613057565b811461338357600080fd5b50565b61338f81613089565b811461339a57600080fd5b5056fea2646970667358221220b076fb0c908bd4bc478734084238e822b5a8272e61ab54eecbf391c81a5da4c764736f6c63430008040033", - "deployedBytecode": "0x6080604052600436106101815760003560e01c806355f804b3116100d1578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd1461053b578063ce606ee014610578578063e985e9c5146105a3578063f4a0a528146105e057610181565b8063a035b1fe146104be578063a22cb465146104e9578063b88d4fde1461051257610181565b806355f804b31461039c5780635aca1bb6146103c55780636352211e146103ee57806370a082311461042b578063714c53981461046857806395d89b411461049357610181565b80631e84c4131161013e578063392f37e911610118578063392f37e9146103045780633ccfd60b1461033357806342842e0e1461034a57806349df728c1461037357610181565b80631e84c41314610287578063217cc2b4146102b257806323b872dd146102db57610181565b806301ffc9a71461018657806306fdde03146101c3578063077f224a146101ee578063081812fc14610217578063095ea7b3146102545780631249c58b1461027d575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a8919061295b565b610609565b6040516101ba9190612d55565b60405180910390f35b3480156101cf57600080fd5b506101d86106eb565b6040516101e59190612dfa565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190612a17565b61077d565b005b34801561022357600080fd5b5061023e60048036038101906102399190612a96565b610904565b60405161024b9190612cc5565b60405180910390f35b34801561026057600080fd5b5061027b600480360381019061027691906128cd565b61094a565b005b610285610a53565b005b34801561029357600080fd5b5061029c610b45565b6040516102a99190612d55565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190612762565b610b58565b005b3480156102e757600080fd5b5061030260048036038101906102fd91906127c7565b610bf3565b005b34801561031057600080fd5b50610319610c4a565b60405161032a959493929190612d70565b60405180910390f35b34801561033f57600080fd5b50610348610f0c565b005b34801561035657600080fd5b50610371600480360381019061036c91906127c7565b610fe2565b005b34801561037f57600080fd5b5061039a600480360381019061039591906129ad565b611002565b005b3480156103a857600080fd5b506103c360048036038101906103be91906129d6565b6111a8565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190612909565b611249565b005b3480156103fa57600080fd5b5061041560048036038101906104109190612a96565b6112ed565b6040516104229190612cc5565b60405180910390f35b34801561043757600080fd5b50610452600480360381019061044d9190612762565b611396565b60405161045f9190612e5c565b60405180910390f35b34801561047457600080fd5b5061047d611445565b60405161048a9190612dfa565b60405180910390f35b34801561049f57600080fd5b506104a86114d7565b6040516104b59190612dfa565b60405180910390f35b3480156104ca57600080fd5b506104d3611569565b6040516104e09190612e5c565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b9190612891565b61156f565b005b34801561051e57600080fd5b5061053960048036038101906105349190612816565b611585565b005b34801561054757600080fd5b50610562600480360381019061055d9190612a96565b6115de565b60405161056f9190612dfa565b60405180910390f35b34801561058457600080fd5b5061058d611646565b60405161059a9190612cc5565b60405180910390f35b3480156105af57600080fd5b506105ca60048036038101906105c5919061278b565b61166a565b6040516105d79190612d55565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190612a96565b6116fe565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106d457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106e457506106e38261178f565b5b9050919050565b6060600b80546106fa90613108565b80601f016020809104026020016040519081016040528092919081815260200182805461072690613108565b80156107735780601f1061074857610100808354040283529160200191610773565b820191906000526020600020905b81548152906001019060200180831161075657829003601f168201915b5050505050905090565b600061078960016117f9565b905080156107ac5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610835576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b908051906020019061084b929190612547565b5083600c9080519060200190610862929190612547565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156108fe5760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516108f59190612ddf565b60405180910390a15b50505050565b600061090f826118eb565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610955826112ed565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109bd576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109dc61192d565b73ffffffffffffffffffffffffffffffffffffffff16141580610a0d5750610a0b81610a0661192d565b61166a565b155b15610a44576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a4e8383611935565b505050565b60026000541415610a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9090612e3c565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff1615151415610aef576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e543414610b2a576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b3b33610b366119ee565b611a09565b6001600081905550565b600f60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bdf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf081610beb6119ee565b611a09565b50565b610c04610bfe61192d565b82611a27565b610c3a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c45838383611abc565b505050565b6002806000018054610c5b90613108565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8790613108565b8015610cd45780601f10610ca957610100808354040283529160200191610cd4565b820191906000526020600020905b815481529060010190602001808311610cb757829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610d4f90613108565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7b90613108565b8015610dc85780601f10610d9d57610100808354040283529160200191610dc8565b820191906000526020600020905b815481529060010190602001808311610dab57829003601f168201915b50505050508152505090806003018054610de190613108565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0d90613108565b8015610e5a5780601f10610e2f57610100808354040283529160200191610e5a565b820191906000526020600020905b815481529060010190602001808311610e3d57829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610e8990613108565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb590613108565b8015610f025780601f10610ed757610100808354040283529160200191610f02565b820191906000526020600020905b815481529060010190602001808311610ee557829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f93576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fde573d6000803e3d6000fd5b5050565b610ffd83838360405180602001604052806000815250611585565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611089576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110c49190612cc5565b60206040518083038186803b1580156110dc57600080fd5b505afa1580156110f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111149190612abf565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611151929190612d2c565b602060405180830381600087803b15801561116b57600080fd5b505af115801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190612932565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461122f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d9080519060200190611245929190612547565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561138d576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113fe576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d805461145490613108565b80601f016020809104026020016040519081016040528092919081815260200182805461148090613108565b80156114cd5780601f106114a2576101008083540402835291602001916114cd565b820191906000526020600020905b8154815290600101906020018083116114b057829003601f168201915b5050505050905090565b6060600c80546114e690613108565b80601f016020809104026020016040519081016040528092919081815260200182805461151290613108565b801561155f5780601f106115345761010080835404028352916020019161155f565b820191906000526020600020905b81548152906001019060200180831161154257829003601f168201915b5050505050905090565b600e5481565b61158161157a61192d565b8383611d11565b5050565b61159661159061192d565b83611a27565b6115cc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115d884848484611edc565b50505050565b60606115e9826118eb565b60006115f3611f2f565b90506000815111611613576040518060200160405280600081525061163e565b8061161d84611f46565b60405160200161162e929190612ca1565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611785576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff161561186f5760018260ff161480156118275750611825306120f3565b155b611866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185d90612e1c565b60405180910390fd5b600090506118e6565b8160ff16600160009054906101000a900460ff1660ff16106118c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bd90612e1c565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b6118f481612106565b61192a576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119a8836112ed565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119fa600a612172565b611a04600a612188565b905090565b611a23828260405180602001604052806000815250612196565b5050565b600080611a33836112ed565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a755750611a74818561166a565b5b80611ab357508373ffffffffffffffffffffffffffffffffffffffff16611a9b84610904565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611adc826112ed565b73ffffffffffffffffffffffffffffffffffffffff1614611b29576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b90576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b9b8383836121e8565b611ba6600082611935565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bf69190612fd9565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c4d9190612f52565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d0c8383836121ed565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d78576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dde576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ecf9190612d55565b60405180910390a3505050565b611ee7848484611abc565b611ef3848484846121f2565b611f29576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415611f8e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120ee565b600082905060005b60008214611fc0578080611fa99061316b565b915050600a82611fb99190612fa8565b9150611f96565b60008167ffffffffffffffff811115612002577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120345781602001600182028036833780820191505090505b5090505b600085146120e75760018261204d9190612fd9565b9150600a8561205c91906131b4565b60306120689190612f52565b60f81b8183815181106120a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120e09190612fa8565b9450612038565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6121a08383612380565b6121ad60008484846121f2565b6121e3576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b60006122138473ffffffffffffffffffffffffffffffffffffffff166120f3565b15612373578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261223c61192d565b8786866040518563ffffffff1660e01b815260040161225e9493929190612ce0565b602060405180830381600087803b15801561227857600080fd5b505af19250505080156122a957506040513d601f19601f820116820180604052508101906122a69190612984565b60015b612323573d80600081146122d9576040519150601f19603f3d011682016040523d82523d6000602084013e6122de565b606091505b5060008151141561231b576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612378565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123f081612106565b15612426576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612432600083836121e8565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124829190612f52565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612543600083836121ed565b5050565b82805461255390613108565b90600052602060002090601f01602090048101928261257557600085556125bc565b82601f1061258e57805160ff19168380011785556125bc565b828001600101855582156125bc579182015b828111156125bb5782518255916020019190600101906125a0565b5b5090506125c991906125cd565b5090565b5b808211156125e65760008160009055506001016125ce565b5090565b60006125fd6125f884612e9c565b612e77565b90508281526020810184848401111561261557600080fd5b6126208482856130c6565b509392505050565b600061263b61263684612ecd565b612e77565b90508281526020810184848401111561265357600080fd5b61265e8482856130c6565b509392505050565b6000813590506126758161332a565b92915050565b60008135905061268a81613341565b92915050565b60008151905061269f81613341565b92915050565b6000813590506126b481613358565b92915050565b6000815190506126c981613358565b92915050565b600082601f8301126126e057600080fd5b81356126f08482602086016125ea565b91505092915050565b6000813590506127088161336f565b92915050565b600082601f83011261271f57600080fd5b813561272f848260208601612628565b91505092915050565b60008135905061274781613386565b92915050565b60008151905061275c81613386565b92915050565b60006020828403121561277457600080fd5b600061278284828501612666565b91505092915050565b6000806040838503121561279e57600080fd5b60006127ac85828601612666565b92505060206127bd85828601612666565b9150509250929050565b6000806000606084860312156127dc57600080fd5b60006127ea86828701612666565b93505060206127fb86828701612666565b925050604061280c86828701612738565b9150509250925092565b6000806000806080858703121561282c57600080fd5b600061283a87828801612666565b945050602061284b87828801612666565b935050604061285c87828801612738565b925050606085013567ffffffffffffffff81111561287957600080fd5b612885878288016126cf565b91505092959194509250565b600080604083850312156128a457600080fd5b60006128b285828601612666565b92505060206128c38582860161267b565b9150509250929050565b600080604083850312156128e057600080fd5b60006128ee85828601612666565b92505060206128ff85828601612738565b9150509250929050565b60006020828403121561291b57600080fd5b60006129298482850161267b565b91505092915050565b60006020828403121561294457600080fd5b600061295284828501612690565b91505092915050565b60006020828403121561296d57600080fd5b600061297b848285016126a5565b91505092915050565b60006020828403121561299657600080fd5b60006129a4848285016126ba565b91505092915050565b6000602082840312156129bf57600080fd5b60006129cd848285016126f9565b91505092915050565b6000602082840312156129e857600080fd5b600082013567ffffffffffffffff811115612a0257600080fd5b612a0e8482850161270e565b91505092915050565b600080600060608486031215612a2c57600080fd5b600084013567ffffffffffffffff811115612a4657600080fd5b612a528682870161270e565b935050602084013567ffffffffffffffff811115612a6f57600080fd5b612a7b8682870161270e565b9250506040612a8c86828701612666565b9150509250925092565b600060208284031215612aa857600080fd5b6000612ab684828501612738565b91505092915050565b600060208284031215612ad157600080fd5b6000612adf8482850161274d565b91505092915050565b612af18161300d565b82525050565b612b008161300d565b82525050565b612b0f8161301f565b82525050565b6000612b2082612efe565b612b2a8185612f14565b9350612b3a8185602086016130d5565b612b43816132a1565b840191505092915050565b612b57816130b4565b82525050565b6000612b6882612f09565b612b728185612f25565b9350612b828185602086016130d5565b612b8b816132a1565b840191505092915050565b6000612ba182612f09565b612bab8185612f36565b9350612bbb8185602086016130d5565b612bc4816132a1565b840191505092915050565b6000612bda82612f09565b612be48185612f47565b9350612bf48185602086016130d5565b80840191505092915050565b6000612c0d602e83612f36565b9150612c18826132b2565b604082019050919050565b6000612c30601f83612f36565b9150612c3b82613301565b602082019050919050565b6000604083016000830151612c5e6000860182612ae8565b5060208301518482036020860152612c768282612b5d565b9150508091505092915050565b612c8c81613089565b82525050565b612c9b81613093565b82525050565b6000612cad8285612bcf565b9150612cb98284612bcf565b91508190509392505050565b6000602082019050612cda6000830184612af7565b92915050565b6000608082019050612cf56000830187612af7565b612d026020830186612af7565b612d0f6040830185612c83565b8181036060830152612d218184612b15565b905095945050505050565b6000604082019050612d416000830185612af7565b612d4e6020830184612c83565b9392505050565b6000602082019050612d6a6000830184612b06565b92915050565b600060a0820190508181036000830152612d8a8188612b15565b90508181036020830152612d9e8187612c46565b90508181036040830152612db28186612b15565b9050612dc16060830185612c92565b8181036080830152612dd38184612b15565b90509695505050505050565b6000602082019050612df46000830184612b4e565b92915050565b60006020820190508181036000830152612e148184612b96565b905092915050565b60006020820190508181036000830152612e3581612c00565b9050919050565b60006020820190508181036000830152612e5581612c23565b9050919050565b6000602082019050612e716000830184612c83565b92915050565b6000612e81612e92565b9050612e8d828261313a565b919050565b6000604051905090565b600067ffffffffffffffff821115612eb757612eb6613272565b5b612ec0826132a1565b9050602081019050919050565b600067ffffffffffffffff821115612ee857612ee7613272565b5b612ef1826132a1565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f5d82613089565b9150612f6883613089565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f9d57612f9c6131e5565b5b828201905092915050565b6000612fb382613089565b9150612fbe83613089565b925082612fce57612fcd613214565b5b828204905092915050565b6000612fe482613089565b9150612fef83613089565b925082821015613002576130016131e5565b5b828203905092915050565b600061301882613069565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006130628261300d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006130bf826130a7565b9050919050565b82818337600083830152505050565b60005b838110156130f35780820151818401526020810190506130d8565b83811115613102576000848401525b50505050565b6000600282049050600182168061312057607f821691505b6020821081141561313457613133613243565b5b50919050565b613143826132a1565b810181811067ffffffffffffffff8211171561316257613161613272565b5b80604052505050565b600061317682613089565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156131a9576131a86131e5565b5b600182019050919050565b60006131bf82613089565b91506131ca83613089565b9250826131da576131d9613214565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6133338161300d565b811461333e57600080fd5b50565b61334a8161301f565b811461335557600080fd5b50565b6133618161302b565b811461336c57600080fd5b50565b61337881613057565b811461338357600080fd5b50565b61338f81613089565b811461339a57600080fd5b5056fea2646970667358221220b076fb0c908bd4bc478734084238e822b5a8272e61ab54eecbf391c81a5da4c764736f6c63430008040033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162003b5e38038062003b5e83398181016040528101906200003791906200040c565b60016000819055506040518060a001604052806040518060400160405280600681526020017f4552433732310000000000000000000000000000000000000000000000000000815250815260200160405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c6c696e6b2e6e6574000000000000000081525081525081526020016040518060400160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250815260200165032a361e860667ffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c4c696e6b2e6e657400000000000000008152508152506002600082015181600001908051906020019062000194929190620002b4565b5060208201518160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906200020392919062000345565b505050604082015181600301908051906020019062000224929190620002b4565b5060608201518160040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550608082015181600501908051906020019062000272929190620002b4565b509050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050620004eb565b828054620002c2906200046c565b90600052602060002090601f016020900481019282620002e6576000855562000332565b82601f106200030157805160ff191683800117855562000332565b8280016001018555821562000332579182015b828111156200033157825182559160200191906001019062000314565b5b509050620003419190620003d6565b5090565b82805462000353906200046c565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b6000815190506200040681620004d1565b92915050565b6000602082840312156200041f57600080fd5b60006200042f84828501620003f5565b91505092915050565b600062000445826200044c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048557607f821691505b602082108114156200049c576200049b620004a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620004dc8162000438565b8114620004e857600080fd5b50565b60805160601c6136546200050a60003960006117a101526136546000f3fe60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105ac578063ce606ee0146105e9578063e985e9c514610614578063f4a0a528146106515761019c565b8063a035b1fe1461052f578063a22cb4651461055a578063b88d4fde146105835761019c565b80636a627842116100c65780636a6278421461046c57806370a082311461049c578063714c5398146104d957806395d89b41146105045761019c565b806355f804b3146103dd5780635aca1bb6146104065780636352211e1461042f5761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103455780633ccfd60b1461037457806342842e0e1461038b57806349df728c146103b45761019c565b8063217cc2b4146102c357806323b872dd146102ec57806327fbceac146103155761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612bdc565b61067a565b6040516101d59190612fd6565b60405180910390f35b3480156101ea57600080fd5b506101f361075c565b604051610200919061307b565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612c98565b6107ee565b005b34801561023e57600080fd5b5061025960048036038101906102549190612d17565b610975565b6040516102669190612f46565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612b4e565b6109bb565b005b3480156102a457600080fd5b506102ad610ac4565b6040516102ba9190612fd6565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061298b565b610ad7565b005b3480156102f857600080fd5b50610313600480360381019061030e91906129f0565b610b72565b005b61032f600480360381019061032a9190612af6565b610bc9565b60405161033c91906130dd565b60405180910390f35b34801561035157600080fd5b5061035a610ca3565b60405161036b959493929190612ff1565b60405180910390f35b34801561038057600080fd5b50610389610f65565b005b34801561039757600080fd5b506103b260048036038101906103ad91906129f0565b61103b565b005b3480156103c057600080fd5b506103db60048036038101906103d69190612c2e565b61105b565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612c57565b611201565b005b34801561041257600080fd5b5061042d60048036038101906104289190612b8a565b6112a2565b005b34801561043b57600080fd5b5061045660048036038101906104519190612d17565b611346565b6040516104639190612f46565b60405180910390f35b6104866004803603810190610481919061298b565b6113ef565b60405161049391906130dd565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061298b565b6114ef565b6040516104d091906130dd565b60405180910390f35b3480156104e557600080fd5b506104ee61159e565b6040516104fb919061307b565b60405180910390f35b34801561051057600080fd5b50610519611630565b604051610526919061307b565b60405180910390f35b34801561053b57600080fd5b506105446116c2565b60405161055191906130dd565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612aba565b6116c8565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190612a3f565b6116de565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190612d17565b611737565b6040516105e0919061307b565b60405180910390f35b3480156105f557600080fd5b506105fe61179f565b60405161060b9190612f46565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906129b4565b6117c3565b6040516106489190612fd6565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190612d17565b611857565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107555750610754826118e8565b5b9050919050565b6060600b805461076b90613389565b80601f016020809104026020016040519081016040528092919081815260200182805461079790613389565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905090565b60006107fa6001611952565b9050801561081d5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a6576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108bc9291906126a0565b5083600c90805190602001906108d39291906126a0565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050801561096f5760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516109669190613060565b60405180910390a15b50505050565b600061098082611a44565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c682611346565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2e576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a4d611a86565b73ffffffffffffffffffffffffffffffffffffffff16141580610a7e5750610a7c81610a77611a86565b6117c3565b155b15610ab5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610abf8383611a8e565b505050565b600f60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b6f81610b6a611b47565b611b62565b50565b610b83610b7d611a86565b82611b80565b610bb9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc4838383611c15565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5c611b47565b9050610c688582611b62565b6000848490501115610c98578383601460008481526020019081526020016000209190610c96929190612726565b505b809150509392505050565b6002806000018054610cb490613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce090613389565b8015610d2d5780601f10610d0257610100808354040283529160200191610d2d565b820191906000526020600020905b815481529060010190602001808311610d1057829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610da890613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd490613389565b8015610e215780601f10610df657610100808354040283529160200191610e21565b820191906000526020600020905b815481529060010190602001808311610e0457829003601f168201915b50505050508152505090806003018054610e3a90613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6690613389565b8015610eb35780601f10610e8857610100808354040283529160200191610eb3565b820191906000526020600020905b815481529060010190602001808311610e9657829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610ee290613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0e90613389565b8015610f5b5780601f10610f3057610100808354040283529160200191610f5b565b820191906000526020600020905b815481529060010190602001808311610f3e57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611037573d6000803e3d6000fd5b5050565b611056838383604051806020016040528060008152506116de565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161111d9190612f46565b60206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190612d40565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016111aa929190612fad565b602060405180830381600087803b1580156111c457600080fd5b505af11580156111d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fc9190612bb3565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611288576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d908051906020019061129e9291906126a0565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611329576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e6576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e906130bd565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff161515141561148d576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146114c8576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114d2611b47565b90506114de8382611b62565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611557576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546115ad90613389565b80601f01602080910402602001604051908101604052809291908181526020018280546115d990613389565b80156116265780601f106115fb57610100808354040283529160200191611626565b820191906000526020600020905b81548152906001019060200180831161160957829003601f168201915b5050505050905090565b6060600c805461163f90613389565b80601f016020809104026020016040519081016040528092919081815260200182805461166b90613389565b80156116b85780601f1061168d576101008083540402835291602001916116b8565b820191906000526020600020905b81548152906001019060200180831161169b57829003601f168201915b5050505050905090565b600e5481565b6116da6116d3611a86565b8383611e6a565b5050565b6116ef6116e9611a86565b83611b80565b611725576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61173184848484612035565b50505050565b606061174282611a44565b600061174c612088565b9050600081511161176c5760405180602001604052806000815250611797565b806117768461209f565b604051602001611787929190612f22565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118de576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156119c85760018260ff16148015611980575061197e3061224c565b155b6119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b69061309d565b60405180910390fd5b60009050611a3f565b8160ff16600160009054906101000a900460ff1660ff1610611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a169061309d565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611a4d8161225f565b611a83576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b0183611346565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b53600a6122cb565b611b5d600a6122e1565b905090565b611b7c8282604051806020016040528060008152506122ef565b5050565b600080611b8c83611346565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bce5750611bcd81856117c3565b5b80611c0c57508373ffffffffffffffffffffffffffffffffffffffff16611bf484610975565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c3582611346565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cf4838383612341565b611cff600082611a8e565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4f919061325a565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da691906131d3565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e65838383612346565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f37576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120289190612fd6565b60405180910390a3505050565b612040848484611c15565b61204c8484848461234b565b612082576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008214156120e7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612247565b600082905060005b60008214612119578080612102906133ec565b915050600a826121129190613229565b91506120ef565b60008167ffffffffffffffff81111561215b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561218d5781602001600182028036833780820191505090505b5090505b60008514612240576001826121a6919061325a565b9150600a856121b59190613435565b60306121c191906131d3565b60f81b8183815181106121fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122399190613229565b9450612191565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6122f983836124d9565b612306600084848461234b565b61233c576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b600061236c8473ffffffffffffffffffffffffffffffffffffffff1661224c565b156124cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612395611a86565b8786866040518563ffffffff1660e01b81526004016123b79493929190612f61565b602060405180830381600087803b1580156123d157600080fd5b505af192505050801561240257506040513d601f19601f820116820180604052508101906123ff9190612c05565b60015b61247c573d8060008114612432576040519150601f19603f3d011682016040523d82523d6000602084013e612437565b606091505b50600081511415612474576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124d1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612540576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125498161225f565b1561257f576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61258b60008383612341565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125db91906131d3565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461269c60008383612346565b5050565b8280546126ac90613389565b90600052602060002090601f0160209004810192826126ce5760008555612715565b82601f106126e757805160ff1916838001178555612715565b82800160010185558215612715579182015b828111156127145782518255916020019190600101906126f9565b5b50905061272291906127ac565b5090565b82805461273290613389565b90600052602060002090601f016020900481019282612754576000855561279b565b82601f1061276d57803560ff191683800117855561279b565b8280016001018555821561279b579182015b8281111561279a57823582559160200191906001019061277f565b5b5090506127a891906127ac565b5090565b5b808211156127c55760008160009055506001016127ad565b5090565b60006127dc6127d78461311d565b6130f8565b9050828152602081018484840111156127f457600080fd5b6127ff848285613347565b509392505050565b600061281a6128158461314e565b6130f8565b90508281526020810184848401111561283257600080fd5b61283d848285613347565b509392505050565b600081359050612854816135ab565b92915050565b600081359050612869816135c2565b92915050565b60008151905061287e816135c2565b92915050565b600081359050612893816135d9565b92915050565b6000815190506128a8816135d9565b92915050565b600082601f8301126128bf57600080fd5b81356128cf8482602086016127c9565b91505092915050565b6000813590506128e7816135f0565b92915050565b60008083601f8401126128ff57600080fd5b8235905067ffffffffffffffff81111561291857600080fd5b60208301915083600182028301111561293057600080fd5b9250929050565b600082601f83011261294857600080fd5b8135612958848260208601612807565b91505092915050565b60008135905061297081613607565b92915050565b60008151905061298581613607565b92915050565b60006020828403121561299d57600080fd5b60006129ab84828501612845565b91505092915050565b600080604083850312156129c757600080fd5b60006129d585828601612845565b92505060206129e685828601612845565b9150509250929050565b600080600060608486031215612a0557600080fd5b6000612a1386828701612845565b9350506020612a2486828701612845565b9250506040612a3586828701612961565b9150509250925092565b60008060008060808587031215612a5557600080fd5b6000612a6387828801612845565b9450506020612a7487828801612845565b9350506040612a8587828801612961565b925050606085013567ffffffffffffffff811115612aa257600080fd5b612aae878288016128ae565b91505092959194509250565b60008060408385031215612acd57600080fd5b6000612adb85828601612845565b9250506020612aec8582860161285a565b9150509250929050565b600080600060408486031215612b0b57600080fd5b6000612b1986828701612845565b935050602084013567ffffffffffffffff811115612b3657600080fd5b612b42868287016128ed565b92509250509250925092565b60008060408385031215612b6157600080fd5b6000612b6f85828601612845565b9250506020612b8085828601612961565b9150509250929050565b600060208284031215612b9c57600080fd5b6000612baa8482850161285a565b91505092915050565b600060208284031215612bc557600080fd5b6000612bd38482850161286f565b91505092915050565b600060208284031215612bee57600080fd5b6000612bfc84828501612884565b91505092915050565b600060208284031215612c1757600080fd5b6000612c2584828501612899565b91505092915050565b600060208284031215612c4057600080fd5b6000612c4e848285016128d8565b91505092915050565b600060208284031215612c6957600080fd5b600082013567ffffffffffffffff811115612c8357600080fd5b612c8f84828501612937565b91505092915050565b600080600060608486031215612cad57600080fd5b600084013567ffffffffffffffff811115612cc757600080fd5b612cd386828701612937565b935050602084013567ffffffffffffffff811115612cf057600080fd5b612cfc86828701612937565b9250506040612d0d86828701612845565b9150509250925092565b600060208284031215612d2957600080fd5b6000612d3784828501612961565b91505092915050565b600060208284031215612d5257600080fd5b6000612d6084828501612976565b91505092915050565b612d728161328e565b82525050565b612d818161328e565b82525050565b612d90816132a0565b82525050565b6000612da18261317f565b612dab8185613195565b9350612dbb818560208601613356565b612dc481613522565b840191505092915050565b612dd881613335565b82525050565b6000612de98261318a565b612df381856131a6565b9350612e03818560208601613356565b612e0c81613522565b840191505092915050565b6000612e228261318a565b612e2c81856131b7565b9350612e3c818560208601613356565b612e4581613522565b840191505092915050565b6000612e5b8261318a565b612e6581856131c8565b9350612e75818560208601613356565b80840191505092915050565b6000612e8e602e836131b7565b9150612e9982613533565b604082019050919050565b6000612eb1601f836131b7565b9150612ebc82613582565b602082019050919050565b6000604083016000830151612edf6000860182612d69565b5060208301518482036020860152612ef78282612dde565b9150508091505092915050565b612f0d8161330a565b82525050565b612f1c81613314565b82525050565b6000612f2e8285612e50565b9150612f3a8284612e50565b91508190509392505050565b6000602082019050612f5b6000830184612d78565b92915050565b6000608082019050612f766000830187612d78565b612f836020830186612d78565b612f906040830185612f04565b8181036060830152612fa28184612d96565b905095945050505050565b6000604082019050612fc26000830185612d78565b612fcf6020830184612f04565b9392505050565b6000602082019050612feb6000830184612d87565b92915050565b600060a082019050818103600083015261300b8188612d96565b9050818103602083015261301f8187612ec7565b905081810360408301526130338186612d96565b90506130426060830185612f13565b81810360808301526130548184612d96565b90509695505050505050565b60006020820190506130756000830184612dcf565b92915050565b600060208201905081810360008301526130958184612e17565b905092915050565b600060208201905081810360008301526130b681612e81565b9050919050565b600060208201905081810360008301526130d681612ea4565b9050919050565b60006020820190506130f26000830184612f04565b92915050565b6000613102613113565b905061310e82826133bb565b919050565b6000604051905090565b600067ffffffffffffffff821115613138576131376134f3565b5b61314182613522565b9050602081019050919050565b600067ffffffffffffffff821115613169576131686134f3565b5b61317282613522565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131de8261330a565b91506131e98361330a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561321e5761321d613466565b5b828201905092915050565b60006132348261330a565b915061323f8361330a565b92508261324f5761324e613495565b5b828204905092915050565b60006132658261330a565b91506132708361330a565b92508282101561328357613282613466565b5b828203905092915050565b6000613299826132ea565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006132e38261328e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061334082613328565b9050919050565b82818337600083830152505050565b60005b83811015613374578082015181840152602081019050613359565b83811115613383576000848401525b50505050565b600060028204905060018216806133a157607f821691505b602082108114156133b5576133b46134c4565b5b50919050565b6133c482613522565b810181811067ffffffffffffffff821117156133e3576133e26134f3565b5b80604052505050565b60006133f78261330a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561342a57613429613466565b5b600182019050919050565b60006134408261330a565b915061344b8361330a565b92508261345b5761345a613495565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6135b48161328e565b81146135bf57600080fd5b50565b6135cb816132a0565b81146135d657600080fd5b50565b6135e2816132ac565b81146135ed57600080fd5b50565b6135f9816132d8565b811461360457600080fd5b50565b6136108161330a565b811461361b57600080fd5b5056fea26469706673582212200ed637e339b54df237a60571cf3e14f417cf818f9ac1b93106fc0d679a8da4a564736f6c63430008040033", + "deployedBytecode": "0x60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105ac578063ce606ee0146105e9578063e985e9c514610614578063f4a0a528146106515761019c565b8063a035b1fe1461052f578063a22cb4651461055a578063b88d4fde146105835761019c565b80636a627842116100c65780636a6278421461046c57806370a082311461049c578063714c5398146104d957806395d89b41146105045761019c565b806355f804b3146103dd5780635aca1bb6146104065780636352211e1461042f5761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103455780633ccfd60b1461037457806342842e0e1461038b57806349df728c146103b45761019c565b8063217cc2b4146102c357806323b872dd146102ec57806327fbceac146103155761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612bdc565b61067a565b6040516101d59190612fd6565b60405180910390f35b3480156101ea57600080fd5b506101f361075c565b604051610200919061307b565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612c98565b6107ee565b005b34801561023e57600080fd5b5061025960048036038101906102549190612d17565b610975565b6040516102669190612f46565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612b4e565b6109bb565b005b3480156102a457600080fd5b506102ad610ac4565b6040516102ba9190612fd6565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061298b565b610ad7565b005b3480156102f857600080fd5b50610313600480360381019061030e91906129f0565b610b72565b005b61032f600480360381019061032a9190612af6565b610bc9565b60405161033c91906130dd565b60405180910390f35b34801561035157600080fd5b5061035a610ca3565b60405161036b959493929190612ff1565b60405180910390f35b34801561038057600080fd5b50610389610f65565b005b34801561039757600080fd5b506103b260048036038101906103ad91906129f0565b61103b565b005b3480156103c057600080fd5b506103db60048036038101906103d69190612c2e565b61105b565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612c57565b611201565b005b34801561041257600080fd5b5061042d60048036038101906104289190612b8a565b6112a2565b005b34801561043b57600080fd5b5061045660048036038101906104519190612d17565b611346565b6040516104639190612f46565b60405180910390f35b6104866004803603810190610481919061298b565b6113ef565b60405161049391906130dd565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061298b565b6114ef565b6040516104d091906130dd565b60405180910390f35b3480156104e557600080fd5b506104ee61159e565b6040516104fb919061307b565b60405180910390f35b34801561051057600080fd5b50610519611630565b604051610526919061307b565b60405180910390f35b34801561053b57600080fd5b506105446116c2565b60405161055191906130dd565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612aba565b6116c8565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190612a3f565b6116de565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190612d17565b611737565b6040516105e0919061307b565b60405180910390f35b3480156105f557600080fd5b506105fe61179f565b60405161060b9190612f46565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906129b4565b6117c3565b6040516106489190612fd6565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190612d17565b611857565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107555750610754826118e8565b5b9050919050565b6060600b805461076b90613389565b80601f016020809104026020016040519081016040528092919081815260200182805461079790613389565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905090565b60006107fa6001611952565b9050801561081d5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a6576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108bc9291906126a0565b5083600c90805190602001906108d39291906126a0565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050801561096f5760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516109669190613060565b60405180910390a15b50505050565b600061098082611a44565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c682611346565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2e576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a4d611a86565b73ffffffffffffffffffffffffffffffffffffffff16141580610a7e5750610a7c81610a77611a86565b6117c3565b155b15610ab5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610abf8383611a8e565b505050565b600f60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b6f81610b6a611b47565b611b62565b50565b610b83610b7d611a86565b82611b80565b610bb9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc4838383611c15565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5c611b47565b9050610c688582611b62565b6000848490501115610c98578383601460008481526020019081526020016000209190610c96929190612726565b505b809150509392505050565b6002806000018054610cb490613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce090613389565b8015610d2d5780601f10610d0257610100808354040283529160200191610d2d565b820191906000526020600020905b815481529060010190602001808311610d1057829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610da890613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd490613389565b8015610e215780601f10610df657610100808354040283529160200191610e21565b820191906000526020600020905b815481529060010190602001808311610e0457829003601f168201915b50505050508152505090806003018054610e3a90613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6690613389565b8015610eb35780601f10610e8857610100808354040283529160200191610eb3565b820191906000526020600020905b815481529060010190602001808311610e9657829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610ee290613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0e90613389565b8015610f5b5780601f10610f3057610100808354040283529160200191610f5b565b820191906000526020600020905b815481529060010190602001808311610f3e57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611037573d6000803e3d6000fd5b5050565b611056838383604051806020016040528060008152506116de565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161111d9190612f46565b60206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190612d40565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016111aa929190612fad565b602060405180830381600087803b1580156111c457600080fd5b505af11580156111d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fc9190612bb3565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611288576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d908051906020019061129e9291906126a0565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611329576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e6576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e906130bd565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff161515141561148d576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146114c8576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114d2611b47565b90506114de8382611b62565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611557576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546115ad90613389565b80601f01602080910402602001604051908101604052809291908181526020018280546115d990613389565b80156116265780601f106115fb57610100808354040283529160200191611626565b820191906000526020600020905b81548152906001019060200180831161160957829003601f168201915b5050505050905090565b6060600c805461163f90613389565b80601f016020809104026020016040519081016040528092919081815260200182805461166b90613389565b80156116b85780601f1061168d576101008083540402835291602001916116b8565b820191906000526020600020905b81548152906001019060200180831161169b57829003601f168201915b5050505050905090565b600e5481565b6116da6116d3611a86565b8383611e6a565b5050565b6116ef6116e9611a86565b83611b80565b611725576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61173184848484612035565b50505050565b606061174282611a44565b600061174c612088565b9050600081511161176c5760405180602001604052806000815250611797565b806117768461209f565b604051602001611787929190612f22565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118de576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156119c85760018260ff16148015611980575061197e3061224c565b155b6119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b69061309d565b60405180910390fd5b60009050611a3f565b8160ff16600160009054906101000a900460ff1660ff1610611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a169061309d565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611a4d8161225f565b611a83576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b0183611346565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b53600a6122cb565b611b5d600a6122e1565b905090565b611b7c8282604051806020016040528060008152506122ef565b5050565b600080611b8c83611346565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bce5750611bcd81856117c3565b5b80611c0c57508373ffffffffffffffffffffffffffffffffffffffff16611bf484610975565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c3582611346565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cf4838383612341565b611cff600082611a8e565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4f919061325a565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da691906131d3565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e65838383612346565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f37576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120289190612fd6565b60405180910390a3505050565b612040848484611c15565b61204c8484848461234b565b612082576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008214156120e7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612247565b600082905060005b60008214612119578080612102906133ec565b915050600a826121129190613229565b91506120ef565b60008167ffffffffffffffff81111561215b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561218d5781602001600182028036833780820191505090505b5090505b60008514612240576001826121a6919061325a565b9150600a856121b59190613435565b60306121c191906131d3565b60f81b8183815181106121fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122399190613229565b9450612191565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6122f983836124d9565b612306600084848461234b565b61233c576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b600061236c8473ffffffffffffffffffffffffffffffffffffffff1661224c565b156124cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612395611a86565b8786866040518563ffffffff1660e01b81526004016123b79493929190612f61565b602060405180830381600087803b1580156123d157600080fd5b505af192505050801561240257506040513d601f19601f820116820180604052508101906123ff9190612c05565b60015b61247c573d8060008114612432576040519150601f19603f3d011682016040523d82523d6000602084013e612437565b606091505b50600081511415612474576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124d1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612540576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125498161225f565b1561257f576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61258b60008383612341565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125db91906131d3565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461269c60008383612346565b5050565b8280546126ac90613389565b90600052602060002090601f0160209004810192826126ce5760008555612715565b82601f106126e757805160ff1916838001178555612715565b82800160010185558215612715579182015b828111156127145782518255916020019190600101906126f9565b5b50905061272291906127ac565b5090565b82805461273290613389565b90600052602060002090601f016020900481019282612754576000855561279b565b82601f1061276d57803560ff191683800117855561279b565b8280016001018555821561279b579182015b8281111561279a57823582559160200191906001019061277f565b5b5090506127a891906127ac565b5090565b5b808211156127c55760008160009055506001016127ad565b5090565b60006127dc6127d78461311d565b6130f8565b9050828152602081018484840111156127f457600080fd5b6127ff848285613347565b509392505050565b600061281a6128158461314e565b6130f8565b90508281526020810184848401111561283257600080fd5b61283d848285613347565b509392505050565b600081359050612854816135ab565b92915050565b600081359050612869816135c2565b92915050565b60008151905061287e816135c2565b92915050565b600081359050612893816135d9565b92915050565b6000815190506128a8816135d9565b92915050565b600082601f8301126128bf57600080fd5b81356128cf8482602086016127c9565b91505092915050565b6000813590506128e7816135f0565b92915050565b60008083601f8401126128ff57600080fd5b8235905067ffffffffffffffff81111561291857600080fd5b60208301915083600182028301111561293057600080fd5b9250929050565b600082601f83011261294857600080fd5b8135612958848260208601612807565b91505092915050565b60008135905061297081613607565b92915050565b60008151905061298581613607565b92915050565b60006020828403121561299d57600080fd5b60006129ab84828501612845565b91505092915050565b600080604083850312156129c757600080fd5b60006129d585828601612845565b92505060206129e685828601612845565b9150509250929050565b600080600060608486031215612a0557600080fd5b6000612a1386828701612845565b9350506020612a2486828701612845565b9250506040612a3586828701612961565b9150509250925092565b60008060008060808587031215612a5557600080fd5b6000612a6387828801612845565b9450506020612a7487828801612845565b9350506040612a8587828801612961565b925050606085013567ffffffffffffffff811115612aa257600080fd5b612aae878288016128ae565b91505092959194509250565b60008060408385031215612acd57600080fd5b6000612adb85828601612845565b9250506020612aec8582860161285a565b9150509250929050565b600080600060408486031215612b0b57600080fd5b6000612b1986828701612845565b935050602084013567ffffffffffffffff811115612b3657600080fd5b612b42868287016128ed565b92509250509250925092565b60008060408385031215612b6157600080fd5b6000612b6f85828601612845565b9250506020612b8085828601612961565b9150509250929050565b600060208284031215612b9c57600080fd5b6000612baa8482850161285a565b91505092915050565b600060208284031215612bc557600080fd5b6000612bd38482850161286f565b91505092915050565b600060208284031215612bee57600080fd5b6000612bfc84828501612884565b91505092915050565b600060208284031215612c1757600080fd5b6000612c2584828501612899565b91505092915050565b600060208284031215612c4057600080fd5b6000612c4e848285016128d8565b91505092915050565b600060208284031215612c6957600080fd5b600082013567ffffffffffffffff811115612c8357600080fd5b612c8f84828501612937565b91505092915050565b600080600060608486031215612cad57600080fd5b600084013567ffffffffffffffff811115612cc757600080fd5b612cd386828701612937565b935050602084013567ffffffffffffffff811115612cf057600080fd5b612cfc86828701612937565b9250506040612d0d86828701612845565b9150509250925092565b600060208284031215612d2957600080fd5b6000612d3784828501612961565b91505092915050565b600060208284031215612d5257600080fd5b6000612d6084828501612976565b91505092915050565b612d728161328e565b82525050565b612d818161328e565b82525050565b612d90816132a0565b82525050565b6000612da18261317f565b612dab8185613195565b9350612dbb818560208601613356565b612dc481613522565b840191505092915050565b612dd881613335565b82525050565b6000612de98261318a565b612df381856131a6565b9350612e03818560208601613356565b612e0c81613522565b840191505092915050565b6000612e228261318a565b612e2c81856131b7565b9350612e3c818560208601613356565b612e4581613522565b840191505092915050565b6000612e5b8261318a565b612e6581856131c8565b9350612e75818560208601613356565b80840191505092915050565b6000612e8e602e836131b7565b9150612e9982613533565b604082019050919050565b6000612eb1601f836131b7565b9150612ebc82613582565b602082019050919050565b6000604083016000830151612edf6000860182612d69565b5060208301518482036020860152612ef78282612dde565b9150508091505092915050565b612f0d8161330a565b82525050565b612f1c81613314565b82525050565b6000612f2e8285612e50565b9150612f3a8284612e50565b91508190509392505050565b6000602082019050612f5b6000830184612d78565b92915050565b6000608082019050612f766000830187612d78565b612f836020830186612d78565b612f906040830185612f04565b8181036060830152612fa28184612d96565b905095945050505050565b6000604082019050612fc26000830185612d78565b612fcf6020830184612f04565b9392505050565b6000602082019050612feb6000830184612d87565b92915050565b600060a082019050818103600083015261300b8188612d96565b9050818103602083015261301f8187612ec7565b905081810360408301526130338186612d96565b90506130426060830185612f13565b81810360808301526130548184612d96565b90509695505050505050565b60006020820190506130756000830184612dcf565b92915050565b600060208201905081810360008301526130958184612e17565b905092915050565b600060208201905081810360008301526130b681612e81565b9050919050565b600060208201905081810360008301526130d681612ea4565b9050919050565b60006020820190506130f26000830184612f04565b92915050565b6000613102613113565b905061310e82826133bb565b919050565b6000604051905090565b600067ffffffffffffffff821115613138576131376134f3565b5b61314182613522565b9050602081019050919050565b600067ffffffffffffffff821115613169576131686134f3565b5b61317282613522565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131de8261330a565b91506131e98361330a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561321e5761321d613466565b5b828201905092915050565b60006132348261330a565b915061323f8361330a565b92508261324f5761324e613495565b5b828204905092915050565b60006132658261330a565b91506132708361330a565b92508282101561328357613282613466565b5b828203905092915050565b6000613299826132ea565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006132e38261328e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061334082613328565b9050919050565b82818337600083830152505050565b60005b83811015613374578082015181840152602081019050613359565b83811115613383576000848401525b50505050565b600060028204905060018216806133a157607f821691505b602082108114156133b5576133b46134c4565b5b50919050565b6133c482613522565b810181811067ffffffffffffffff821117156133e3576133e26134f3565b5b80604052505050565b60006133f78261330a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561342a57613429613466565b5b600182019050919050565b60006134408261330a565b915061344b8361330a565b92508261345b5761345a613495565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6135b48161328e565b81146135bf57600080fd5b50565b6135cb816132a0565b81146135d657600080fd5b50565b6135e2816132ac565b81146135ed57600080fd5b50565b6135f9816132d8565b811461360457600080fd5b50565b6136108161330a565b811461361b57600080fd5b5056fea26469706673582212200ed637e339b54df237a60571cf3e14f417cf818f9ac1b93106fc0d679a8da4a564736f6c63430008040033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json index 886687e0..ec9ed71c 100644 --- a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json +++ b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json @@ -183,8 +183,8 @@ "type": "function" } ], - "bytecode": "0x60c06040527362a7aa79a52591ccc62b71729329a80a666fa50f600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561006557600080fd5b50604051610dc6380380610dc683398181016040528101906100879190610111565b8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050610196565b60008151905061010b8161017f565b92915050565b6000806040838503121561012457600080fd5b6000610132858286016100fc565b9250506020610143858286016100fc565b9150509250929050565b60006101588261015f565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6101888161014d565b811461019357600080fd5b50565b60805160601c60a05160601c610bfe6101c860003960008181610459015261065d015260006101970152610bfe6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a05565b60405180910390f35b6100a8610195565b6040516100b5919061091d565b60405180910390f35b6100d860048036038101906100d39190610800565b6101b9565b6040516100e5919061097c565b60405180910390f35b61010860048036038101906101039190610829565b6102a8565b005b61011261065b565b60405161011f919061091d565b60405180910390f35b610142600480360381019061013d9190610800565b61067f565b60405161014f9190610961565b60405180910390f35b610172600480360381019061016d9190610800565b61069f565b604051610180929190610997565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103975750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610452576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047d7f0000000000000000000000000000000000000000000000000000000000000000610703565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104bc939291906109c0565b600060405180830381600087803b1580156104d657600080fd5b505af11580156104ea573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610619600061076d565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db11878360405161064a929190610938565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079661079184610a45565b610a20565b9050828152602081018484840111156107ae57600080fd5b6107b9848285610afe565b509392505050565b6000813590506107d081610bb1565b92915050565b600082601f8301126107e757600080fd5b81356107f7848260208601610783565b91505092915050565b60006020828403121561081257600080fd5b6000610820848285016107c1565b91505092915050565b60008060006060848603121561083e57600080fd5b600061084c868287016107c1565b935050602084013567ffffffffffffffff81111561086957600080fd5b610875868287016107d6565b925050604084013567ffffffffffffffff81111561089257600080fd5b61089e868287016107d6565b9150509250925092565b6108b181610a92565b82525050565b6108c081610aa4565b82525050565b6108cf81610ada565b82525050565b60006108e082610a76565b6108ea8185610a81565b93506108fa818560208601610b0d565b61090381610ba0565b840191505092915050565b61091781610ad0565b82525050565b600060208201905061093260008301846108a8565b92915050565b600060408201905061094d60008301856108a8565b61095a60208301846108a8565b9392505050565b600060208201905061097660008301846108b7565b92915050565b600060208201905061099160008301846108c6565b92915050565b60006040820190506109ac60008301856108c6565b6109b960208301846108a8565b9392505050565b600060608201905081810360008301526109da81866108d5565b905081810360208301526109ee81856108d5565b90506109fd60408301846108a8565b949350505050565b6000602082019050610a1a600083018461090e565b92915050565b6000610a2a610a3b565b9050610a368282610b40565b919050565b6000604051905090565b600067ffffffffffffffff821115610a6057610a5f610b71565b5b610a6982610ba0565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9d82610ab0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae582610aec565b9050919050565b6000610af782610ab0565b9050919050565b82818337600083830152505050565b60005b83811015610b2b578082015181840152602081019050610b10565b83811115610b3a576000848401525b50505050565b610b4982610ba0565b810181811067ffffffffffffffff82111715610b6857610b67610b71565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bba81610a92565b8114610bc557600080fd5b5056fea264697066735822122084de2a524e48a09c15c89bd6d0cf5fce6c1c5d9b171e39510881f0f2604252b764736f6c63430008040033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a05565b60405180910390f35b6100a8610195565b6040516100b5919061091d565b60405180910390f35b6100d860048036038101906100d39190610800565b6101b9565b6040516100e5919061097c565b60405180910390f35b61010860048036038101906101039190610829565b6102a8565b005b61011261065b565b60405161011f919061091d565b60405180910390f35b610142600480360381019061013d9190610800565b61067f565b60405161014f9190610961565b60405180910390f35b610172600480360381019061016d9190610800565b61069f565b604051610180929190610997565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806103975750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cd576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610452576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047d7f0000000000000000000000000000000000000000000000000000000000000000610703565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104bc939291906109c0565b600060405180830381600087803b1580156104d657600080fd5b505af11580156104ea573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610619600061076d565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db11878360405161064a929190610938565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079661079184610a45565b610a20565b9050828152602081018484840111156107ae57600080fd5b6107b9848285610afe565b509392505050565b6000813590506107d081610bb1565b92915050565b600082601f8301126107e757600080fd5b81356107f7848260208601610783565b91505092915050565b60006020828403121561081257600080fd5b6000610820848285016107c1565b91505092915050565b60008060006060848603121561083e57600080fd5b600061084c868287016107c1565b935050602084013567ffffffffffffffff81111561086957600080fd5b610875868287016107d6565b925050604084013567ffffffffffffffff81111561089257600080fd5b61089e868287016107d6565b9150509250925092565b6108b181610a92565b82525050565b6108c081610aa4565b82525050565b6108cf81610ada565b82525050565b60006108e082610a76565b6108ea8185610a81565b93506108fa818560208601610b0d565b61090381610ba0565b840191505092915050565b61091781610ad0565b82525050565b600060208201905061093260008301846108a8565b92915050565b600060408201905061094d60008301856108a8565b61095a60208301846108a8565b9392505050565b600060208201905061097660008301846108b7565b92915050565b600060208201905061099160008301846108c6565b92915050565b60006040820190506109ac60008301856108c6565b6109b960208301846108a8565b9392505050565b600060608201905081810360008301526109da81866108d5565b905081810360208301526109ee81856108d5565b90506109fd60408301846108a8565b949350505050565b6000602082019050610a1a600083018461090e565b92915050565b6000610a2a610a3b565b9050610a368282610b40565b919050565b6000604051905090565b600067ffffffffffffffff821115610a6057610a5f610b71565b5b610a6982610ba0565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9d82610ab0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae582610aec565b9050919050565b6000610af782610ab0565b9050919050565b82818337600083830152505050565b60005b83811015610b2b578082015181840152602081019050610b10565b83811115610b3a576000848401525b50505050565b610b4982610ba0565b810181811067ffffffffffffffff82111715610b6857610b67610b71565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bba81610a92565b8114610bc557600080fd5b5056fea264697066735822122084de2a524e48a09c15c89bd6d0cf5fce6c1c5d9b171e39510881f0f2604252b764736f6c63430008040033", + "bytecode": "0x60c060405234801561001057600080fd5b50604051610d76380380610d76833981810160405281019061003291906100bc565b8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050610141565b6000815190506100b68161012a565b92915050565b600080604083850312156100cf57600080fd5b60006100dd858286016100a7565b92505060206100ee858286016100a7565b9150509250929050565b60006101038261010a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610133816100f8565b811461013e57600080fd5b50565b60805160601c60a05160601c610bfc61017a60003960008181610457015261065b01526000818161019701526103470152610bfc6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea26469706673582212200a6767f45c48ead348adb16fea971ac62e6e768ac232577cf77499a4332030c764736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea26469706673582212200a6767f45c48ead348adb16fea971ac62e6e768ac232577cf77499a4332030c764736f6c63430008040033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/packages/hyperverse-evm-erc721/contracts.json b/packages/hyperverse-evm-erc721/contracts.json index 3a91682d..50661495 100644 --- a/packages/hyperverse-evm-erc721/contracts.json +++ b/packages/hyperverse-evm-erc721/contracts.json @@ -15,8 +15,8 @@ }, "ethereum": { "testnet": { - "contractAddress": "0x6D8cBb2e47b13dA0f397a7dBa8417D6132279293", - "factoryAddress": "0xf6A0C58e2E17561C4F9e895e8D2bF84f934828df" + "contractAddress": "0xEcA806fE544DDd4c05f2Cda12f932F0eCB528525", + "factoryAddress": "0xb42a64d1968567F62c77E9c3c8C560e8Dd988374" }, "mainnet": {} }, diff --git a/packages/hyperverse-evm-erc721/contracts/ERC721.sol b/packages/hyperverse-evm-erc721/contracts/ERC721.sol index e59b8147..71862d16 100644 --- a/packages/hyperverse-evm-erc721/contracts/ERC721.sol +++ b/packages/hyperverse-evm-erc721/contracts/ERC721.sol @@ -2,665 +2,656 @@ pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; -import "./hyperverse/IHyperverseModule.sol"; -import "./hyperverse/Initializable.sol"; -import "./utils/Counters.sol"; -import "./utils/Strings.sol"; -import "./utils/Address.sol"; -import "./utils/Context.sol"; -import "./helper/ERC165.sol"; -import "./helper/ReentrancyGuard.sol"; - -import "./interface/IERC721Metadata.sol"; -import "./interface/IERC721.sol"; -import "./interface/IERC721Receiver.sol"; -import "./interface/IERC20.sol"; +import './hyperverse/IHyperverseModule.sol'; +import './hyperverse/Initializable.sol'; +import './utils/Counters.sol'; +import './utils/Strings.sol'; +import './utils/Address.sol'; +import './utils/Context.sol'; +import './helper/ERC165.sol'; +import './helper/ReentrancyGuard.sol'; + +import './interface/IERC721Metadata.sol'; +import './interface/IERC721.sol'; +import './interface/IERC721Receiver.sol'; +import './interface/IERC20.sol'; contract ERC721 is - Context, - ERC165, - IERC721, - IERC721Metadata, - ReentrancyGuard, - Initializable, - IHyperverseModule + Context, + ERC165, + IERC721, + IERC721Metadata, + ReentrancyGuard, + Initializable, + IHyperverseModule { - using Counters for Counters.Counter; - using Strings for uint256; - using Address for address; - - /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ S T A T E @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - - // Account used to deploy contract - address public immutable contractOwner; - - //stores the tenant owner - address private _tenantOwner; - - Counters.Counter private tokenCounter; - - string private _name; - string private _symbol; - string private baseURI; - uint256 public price; - bool public isPublicSaleActive; - - mapping(uint256 => address) private _owners; - mapping(address => uint256) private _balances; - mapping(uint256 => address) private _tokenApprovals; - mapping(address => mapping(address => bool)) private _operatorApprovals; - - /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ E V E N T S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - - ///+events - - /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ E R R O R S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - error Unauthorized(); - error AlreadyInitialized(); - error ZeroAddress(); - error SameAddress(); - error InsufficientBalance(); - error InsufficientAllowance(); - error PublicMintInactive(); - error InvalidTokenId(); - error MissingERC721Receiver(); - error TokenAlreadyMinted(); - error IncorrectOwner(); - error SameOwnerAndOperator(); - - /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ M O D I F I E R S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - - ///+modifiers - modifier isTenantOwner() { - if (msg.sender != _tenantOwner) { - revert Unauthorized(); - } - _; - } - - modifier canInitialize(address _tenant) { - if (_tenantOwner != address(0)) { - revert AlreadyInitialized(); - } - _; - } - - modifier checkMint() { - if (isPublicSaleActive == false) { - revert PublicMintInactive(); - } - _; - } - - modifier checkPayment() { - if (msg.value != price) { - revert InsufficientBalance(); - } - _; - } - - /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ C O N S T R U C T O R @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - - constructor(address _owner) { - metadata = ModuleMetadata( - "ERC721", - Author(_owner, "https://externallink.net"), - "0.0.1", - 3479831479814, - "https://externalLink.net" - ); - contractOwner = _owner; - } - - /** - * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. - */ - function initialize( - string memory name_, - string memory symbol_, - address tenant_ - ) external initializer canInitialize(tenant_) { - _name = name_; - _symbol = symbol_; - _tenantOwner = tenant_; - } - - function mint() external payable nonReentrant checkMint checkPayment { - _safeMint(msg.sender, nextTokenId()); - } - - function getBaseURI() external view returns (string memory) { - return baseURI; - } - - // HELPERS - function nextTokenId() private returns (uint256) { - tokenCounter.increment(); - return tokenCounter.current(); - } - - //TENANT OWNER FUNCTIONS - function tenantMint(address _reciever) external isTenantOwner { - _safeMint(_reciever, nextTokenId()); - } - - function setMintPrice(uint256 _price) external isTenantOwner { - price = _price; - } - - function setBaseURI(string memory baseURI_) external isTenantOwner { - baseURI = baseURI_; - } - - function setPublicSale(bool _isActive) external isTenantOwner { - isPublicSaleActive = _isActive; - } - - ///TOKEN WITHDRAWAL - function withdraw() public isTenantOwner { - uint256 balance = address(this).balance; - payable(msg.sender).transfer(balance); - } - - function withdrawTokens(IERC20 _token) public isTenantOwner { - uint256 balance = _token.balanceOf(address(this)); - _token.transfer(msg.sender, balance); - } - - ///FUNCTION OVERRIDES - /** - * @dev See {IERC721Metadata-tokenURI}. - */ - function tokenURI(uint256 _tokenId) - external - view - virtual - override - returns (string memory) - { - _requireMinted(_tokenId); - - string memory baseURI_ = _baseURI(); - return - bytes(baseURI_).length > 0 - ? string(abi.encodePacked(baseURI_, _tokenId.toString())) - : ""; - } - - /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ERC721 METHODS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ - /** - * @dev See {IERC165-supportsInterface}. - */ - function supportsInterface(bytes4 _interfaceId) - public - view - virtual - override(ERC165, IERC165) - returns (bool) - { - return - _interfaceId == type(IERC721).interfaceId || - _interfaceId == type(IERC721Metadata).interfaceId || - super.supportsInterface(_interfaceId); - } - - /** - * @dev See {IERC721-balanceOf}. - */ - function balanceOf(address _owner) - public - view - virtual - override - returns (uint256) - { - if (_owner == address(0)) { - revert ZeroAddress(); - } - - return _balances[_owner]; - } - - /** - * @dev See {IERC721-ownerOf}. - */ - function ownerOf(uint256 _tokenId) - public - view - virtual - override - returns (address) - { - address owner = _owners[_tokenId]; - if (owner == address(0)) { - revert InvalidTokenId(); - } - return owner; - } - - /** - * @dev See {IERC721Metadata-name}. - */ - function name() public view virtual override returns (string memory) { - return _name; - } - - /** - * @dev See {IERC721Metadata-symbol}. - */ - function symbol() public view virtual override returns (string memory) { - return _symbol; - } - - /** - * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each - * token will be the concatenation of the `baseURI` and the `tokenId`. Empty - * by default, can be overridden in child contracts. - */ - function _baseURI() internal view virtual returns (string memory) { - return ""; - } - - /** - * @dev See {IERC721-approve}. - */ - function approve(address _to, uint256 _tokenId) public virtual override { - address owner = ERC721.ownerOf(_tokenId); - if (owner == _to) { - revert SameAddress(); - } - - if (_msgSender() != owner || !isApprovedForAll(owner, _msgSender())) { - revert Unauthorized(); - } - - _approve(_to, _tokenId); - } - - /** - * @dev See {IERC721-getApproved}. - */ - function getApproved(uint256 _tokenId) - public - view - virtual - override - returns (address) - { - _requireMinted(_tokenId); - - return _tokenApprovals[_tokenId]; - } - - /** - * @dev See {IERC721-setApprovalForAll}. - */ - function setApprovalForAll(address _operator, bool _approved) - public - virtual - override - { - _setApprovalForAll(_msgSender(), _operator, _approved); - } - - /** - * @dev See {IERC721-isApprovedForAll}. - */ - function isApprovedForAll(address _owner, address _operator) - public - view - virtual - override - returns (bool) - { - return _operatorApprovals[_owner][_operator]; - } - - /** - * @dev See {IERC721-transferFrom}. - */ - function transferFrom( - address _from, - address _to, - uint256 _tokenId - ) public virtual override { - if (!(_isApprovedOrOwner(_msgSender(), _tokenId))) { - revert Unauthorized(); - } - - _transfer(_from, _to, _tokenId); - } - - /** - * @dev See {IERC721-safeTransferFrom}. - */ - function safeTransferFrom( - address _from, - address _to, - uint256 _tokenId - ) public virtual override { - safeTransferFrom(_from, _to, _tokenId, ""); - } - - /** - * @dev See {IERC721-safeTransferFrom}. - */ - function safeTransferFrom( - address _from, - address _to, - uint256 _tokenId, - bytes memory _data - ) public virtual override { - if (!(_isApprovedOrOwner(_msgSender(), _tokenId))) { - revert Unauthorized(); - } - - _safeTransfer(_from, _to, _tokenId, _data); - } - - /** - * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients - * are aware of the ERC721 protocol to prevent tokens from being forever locked. - * - * `data` is additional data, it has no specified format and it is sent in call to `to`. - * - * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. - * implement alternative mechanisms to perform token transfer, such as signature-based. - * - * Requirements: - * - * - `from` cannot be the zero address. - * - `to` cannot be the zero address. - * - `tokenId` token must exist and be owned by `from`. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function _safeTransfer( - address _from, - address _to, - uint256 _tokenId, - bytes memory _data - ) internal virtual { - _transfer(_from, _to, _tokenId); - - if (!_checkOnERC721Received(_from, _to, _tokenId, _data)) { - revert MissingERC721Receiver(); - } - } - - /** - * @dev Returns whether `tokenId` exists. - * - * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. - * - * Tokens start existing when they are minted (`_mint`), - * and stop existing when they are burned (`_burn`). - */ - function _exists(uint256 _tokenId) internal view virtual returns (bool) { - return _owners[_tokenId] != address(0); - } - - /** - * @dev Returns whether `spender` is allowed to manage `tokenId`. - * - * Requirements: - * - * - `tokenId` must exist. - */ - function _isApprovedOrOwner(address _spender, uint256 _tokenId) - internal - view - virtual - returns (bool) - { - address owner = ERC721.ownerOf(_tokenId); - return (_spender == owner || - isApprovedForAll(owner, _spender) || - getApproved(_tokenId) == _spender); - } - - /** - * @dev Safely mints `tokenId` and transfers it to `to`. - * - * Requirements: - * - * - `tokenId` must not exist. - * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. - * - * Emits a {Transfer} event. - */ - function _safeMint(address _to, uint256 _tokenId) internal virtual { - _safeMint(_to, _tokenId, ""); - } - - /** - * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is - * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. - */ - function _safeMint( - address _to, - uint256 _tokenId, - bytes memory _data - ) internal virtual { - _mint(_to, _tokenId); - - if (!_checkOnERC721Received(address(0), _to, _tokenId, _data)) { - revert MissingERC721Receiver(); - } - } - - /** - * @dev Mints `tokenId` and transfers it to `to`. - * - * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible - * - * Requirements: - * - * - `tokenId` must not exist. - * - `to` cannot be the zero address. - * - * Emits a {Transfer} event. - */ - function _mint(address _to, uint256 _tokenId) internal virtual { - if(_to == address(0)) { - revert ZeroAddress(); - } - - if(_exists(_tokenId)) { - revert TokenAlreadyMinted(); - } - - _beforeTokenTransfer(address(0), _to, _tokenId); - - _balances[_to] += 1; - _owners[_tokenId] = _to; - - emit Transfer(address(0), _to, _tokenId); - - _afterTokenTransfer(address(0), _to, _tokenId); - } - - /** - * @dev Destroys `tokenId`. - * The approval is cleared when the token is burned. - * - * Requirements: - * - * - `tokenId` must exist. - * - * Emits a {Transfer} event. - */ - function _burn(uint256 _tokenId) internal virtual { - address owner = ERC721.ownerOf(_tokenId); - - _beforeTokenTransfer(owner, address(0), _tokenId); - - // Clear approvals - _approve(address(0), _tokenId); - - _balances[owner] -= 1; - delete _owners[_tokenId]; - - emit Transfer(owner, address(0), _tokenId); - - _afterTokenTransfer(owner, address(0), _tokenId); - } - - /** - * @dev Transfers `tokenId` from `from` to `to`. - * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. - * - * Requirements: - * - * - `to` cannot be the zero address. - * - `tokenId` token must be owned by `from`. - * - * Emits a {Transfer} event. - */ - function _transfer( - address _from, - address _to, - uint256 _tokenId - ) internal virtual { - - if(ERC721.ownerOf(_tokenId) != _from) { - revert IncorrectOwner(); - } - - if(_to == address(0)) { - revert ZeroAddress(); - } - _beforeTokenTransfer(_from, _to, _tokenId); - - // Clear approvals from the previous owner - _approve(address(0), _tokenId); - - _balances[_from] -= 1; - _balances[_to] += 1; - _owners[_tokenId] = _to; - - emit Transfer(_from, _to, _tokenId); - - _afterTokenTransfer(_from, _to, _tokenId); - } - - /** - * @dev Approve `to` to operate on `tokenId` - * - * Emits an {Approval} event. - */ - function _approve(address _to, uint256 _tokenId) internal virtual { - _tokenApprovals[_tokenId] = _to; - emit Approval(ERC721.ownerOf(_tokenId), _to, _tokenId); - } - - /** - * @dev Approve `operator` to operate on all of `owner` tokens - * - * Emits an {ApprovalForAll} event. - */ - function _setApprovalForAll( - address _owner, - address _operator, - bool _approved - ) internal virtual { - if(_operator == address(0)) { - revert ZeroAddress(); - } - if(_owner == _operator ) { - revert SameOwnerAndOperator(); - } - - _operatorApprovals[_owner][_operator] = _approved; - emit ApprovalForAll(_owner, _operator, _approved); - } - - /** - * @dev Reverts if the `tokenId` has not been minted yet. - */ - function _requireMinted(uint256 _tokenId) internal view virtual { - if(!_exists(_tokenId)) { - revert InvalidTokenId(); - } - - } - - /** - * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. - * The call is not executed if the target address is not a contract. - * - * @param _from address representing the previous owner of the given token ID - * @param _to target address that will receive the tokens - * @param _tokenId uint256 ID of the token to be transferred - * @param _data bytes optional data to send along with the call - * @return _bool whether the call correctly returned the expected magic value - */ - function _checkOnERC721Received( - address _from, - address _to, - uint256 _tokenId, - bytes memory _data - ) private returns (bool) { - if (_to.isContract()) { - try - IERC721Receiver(_to).onERC721Received( - _msgSender(), - _from, - _tokenId, - _data - ) - returns (bytes4 retval) { - return retval == IERC721Receiver.onERC721Received.selector; - } catch (bytes memory reason) { - if (reason.length == 0) { - revert MissingERC721Receiver(); - } else { - /// @solidity memory-safe-assembly - assembly { - revert(add(32, reason), mload(reason)) - } - } - } - } else { - return true; - } - } - - /** - * @dev Hook that is called before any token transfer. This includes minting - * and burning. - * - * Calling conditions: - * - * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be - * transferred to `to`. - * - When `from` is zero, `tokenId` will be minted for `to`. - * - When `to` is zero, ``from``'s `tokenId` will be burned. - * - `from` and `to` are never both zero. - * - * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. - */ - function _beforeTokenTransfer( - address _from, - address _to, - uint256 _tokenId - ) internal virtual {} - - /** - * @dev Hook that is called after any transfer of tokens. This includes - * minting and burning. - * - * Calling conditions: - * - * - when `from` and `to` are both non-zero. - * - `from` and `to` are never both zero. - * - * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. - */ - function _afterTokenTransfer( - address _from, - address _to, - uint256 _tokenId - ) internal virtual {} + using Counters for Counters.Counter; + using Strings for uint256; + using Address for address; + + /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ S T A T E @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + // Account used to deploy contract + address public immutable contractOwner; + + //stores the tenant owner + address private _tenantOwner; + + Counters.Counter private tokenCounter; + + string private _name; + string private _symbol; + string private baseURI; + uint256 public price; + bool public isPublicSaleActive; + + mapping(uint256 => address) private _owners; + mapping(address => uint256) private _balances; + mapping(uint256 => address) private _tokenApprovals; + mapping(address => mapping(address => bool)) private _operatorApprovals; + + // Mapping for individual token URIs + mapping (uint256 => string) internal _tokenURIs; + /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ E V E N T S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + ///+events + + /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ E R R O R S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + error Unauthorized(); + error AlreadyInitialized(); + error ZeroAddress(); + error SameAddress(); + error InsufficientBalance(); + error InsufficientAllowance(); + error PublicMintInactive(); + error InvalidTokenId(); + error MissingERC721Receiver(); + error TokenAlreadyMinted(); + error IncorrectOwner(); + error SameOwnerAndOperator(); + + /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ M O D I F I E R S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + ///+modifiers + modifier isTenantOwner() { + if (msg.sender != _tenantOwner) { + revert Unauthorized(); + } + _; + } + + modifier canInitialize(address _tenant) { + if (_tenantOwner != address(0)) { + revert AlreadyInitialized(); + } + _; + } + + modifier checkMint() { + if (isPublicSaleActive == false) { + revert PublicMintInactive(); + } + _; + } + + modifier checkPayment() { + if (msg.value != price) { + revert InsufficientBalance(); + } + _; + } + + /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ C O N S T R U C T O R @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + constructor(address _owner) { + metadata = ModuleMetadata( + 'ERC721', + Author(_owner, 'https://externallink.net'), + '0.0.1', + 3479831479814, + 'https://externalLink.net' + ); + contractOwner = _owner; + } + + /** + * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. + */ + function initialize( + string memory name_, + string memory symbol_, + address tenant_ + ) external initializer canInitialize(tenant_) { + _name = name_; + _symbol = symbol_; + _tenantOwner = tenant_; + } + + function mint(address _to) + external + payable + nonReentrant + checkMint + checkPayment + returns (uint256) + { + uint256 tokenId = nextTokenId(); + _safeMint(_to, tokenId); + return tokenId; + } + + function getBaseURI() external view returns (string memory) { + return baseURI; + } + + //TENANT OWNER FUNCTIONS + function tenantMint(address _reciever) external isTenantOwner { + _safeMint(_reciever, nextTokenId()); + } + + function tenantMint(address _to, string calldata _uri) + external + payable + isTenantOwner + returns (uint256) + { + uint256 tokenId = nextTokenId(); + _safeMint(_to, tokenId); + if (bytes(_uri).length > 0) { + _tokenURIs[tokenId] = _uri; + } + + return tokenId; + } + + function setMintPrice(uint256 _price) external isTenantOwner { + price = _price; + } + + function setBaseURI(string memory baseURI_) external isTenantOwner { + baseURI = baseURI_; + } + + function setPublicSale(bool _isActive) external isTenantOwner { + isPublicSaleActive = _isActive; + } + + // HELPERS + function nextTokenId() private returns (uint256) { + tokenCounter.increment(); + return tokenCounter.current(); + } + + ///TOKEN WITHDRAWAL + function withdraw() public isTenantOwner { + uint256 balance = address(this).balance; + payable(msg.sender).transfer(balance); + } + + function withdrawTokens(IERC20 _token) public isTenantOwner { + uint256 balance = _token.balanceOf(address(this)); + _token.transfer(msg.sender, balance); + } + + ///FUNCTION OVERRIDES + /** + * @dev See {IERC721Metadata-tokenURI}. + */ + function tokenURI(uint256 _tokenId) external view virtual override returns (string memory) { + _requireMinted(_tokenId); + + string memory baseURI_ = _baseURI(); + return + bytes(baseURI_).length > 0 + ? string(abi.encodePacked(baseURI_, _tokenId.toString())) + : ''; + } + + /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ERC721 METHODS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + /** + * @dev See {IERC165-supportsInterface}. + */ + function supportsInterface(bytes4 _interfaceId) + public + view + virtual + override(ERC165, IERC165) + returns (bool) + { + return + _interfaceId == type(IERC721).interfaceId || + _interfaceId == type(IERC721Metadata).interfaceId || + super.supportsInterface(_interfaceId); + } + + /** + * @dev See {IERC721-balanceOf}. + */ + function balanceOf(address _owner) public view virtual override returns (uint256) { + if (_owner == address(0)) { + revert ZeroAddress(); + } + + return _balances[_owner]; + } + + /** + * @dev See {IERC721-ownerOf}. + */ + function ownerOf(uint256 _tokenId) public view virtual override returns (address) { + address owner = _owners[_tokenId]; + if (owner == address(0)) { + revert InvalidTokenId(); + } + return owner; + } + + /** + * @dev See {IERC721Metadata-name}. + */ + function name() public view virtual override returns (string memory) { + return _name; + } + + /** + * @dev See {IERC721Metadata-symbol}. + */ + function symbol() public view virtual override returns (string memory) { + return _symbol; + } + + /** + * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each + * token will be the concatenation of the `baseURI` and the `tokenId`. Empty + * by default, can be overridden in child contracts. + */ + function _baseURI() internal view virtual returns (string memory) { + return ''; + } + + /** + * @dev See {IERC721-approve}. + */ + function approve(address _to, uint256 _tokenId) public virtual override { + address owner = ERC721.ownerOf(_tokenId); + if (owner == _to) { + revert SameAddress(); + } + + if (_msgSender() != owner || !isApprovedForAll(owner, _msgSender())) { + revert Unauthorized(); + } + + _approve(_to, _tokenId); + } + + /** + * @dev See {IERC721-getApproved}. + */ + function getApproved(uint256 _tokenId) public view virtual override returns (address) { + _requireMinted(_tokenId); + + return _tokenApprovals[_tokenId]; + } + + /** + * @dev See {IERC721-setApprovalForAll}. + */ + function setApprovalForAll(address _operator, bool _approved) public virtual override { + _setApprovalForAll(_msgSender(), _operator, _approved); + } + + /** + * @dev See {IERC721-isApprovedForAll}. + */ + function isApprovedForAll(address _owner, address _operator) + public + view + virtual + override + returns (bool) + { + return _operatorApprovals[_owner][_operator]; + } + + /** + * @dev See {IERC721-transferFrom}. + */ + function transferFrom( + address _from, + address _to, + uint256 _tokenId + ) public virtual override { + if (!(_isApprovedOrOwner(_msgSender(), _tokenId))) { + revert Unauthorized(); + } + + _transfer(_from, _to, _tokenId); + } + + /** + * @dev See {IERC721-safeTransferFrom}. + */ + function safeTransferFrom( + address _from, + address _to, + uint256 _tokenId + ) public virtual override { + safeTransferFrom(_from, _to, _tokenId, ''); + } + + /** + * @dev See {IERC721-safeTransferFrom}. + */ + function safeTransferFrom( + address _from, + address _to, + uint256 _tokenId, + bytes memory _data + ) public virtual override { + if (!(_isApprovedOrOwner(_msgSender(), _tokenId))) { + revert Unauthorized(); + } + + _safeTransfer(_from, _to, _tokenId, _data); + } + + /** + * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients + * are aware of the ERC721 protocol to prevent tokens from being forever locked. + * + * `data` is additional data, it has no specified format and it is sent in call to `to`. + * + * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. + * implement alternative mechanisms to perform token transfer, such as signature-based. + * + * Requirements: + * + * - `from` cannot be the zero address. + * - `to` cannot be the zero address. + * - `tokenId` token must exist and be owned by `from`. + * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. + * + * Emits a {Transfer} event. + */ + function _safeTransfer( + address _from, + address _to, + uint256 _tokenId, + bytes memory _data + ) internal virtual { + _transfer(_from, _to, _tokenId); + + if (!_checkOnERC721Received(_from, _to, _tokenId, _data)) { + revert MissingERC721Receiver(); + } + } + + /** + * @dev Returns whether `tokenId` exists. + * + * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. + * + * Tokens start existing when they are minted (`_mint`), + * and stop existing when they are burned (`_burn`). + */ + function _exists(uint256 _tokenId) internal view virtual returns (bool) { + return _owners[_tokenId] != address(0); + } + + /** + * @dev Returns whether `spender` is allowed to manage `tokenId`. + * + * Requirements: + * + * - `tokenId` must exist. + */ + function _isApprovedOrOwner(address _spender, uint256 _tokenId) + internal + view + virtual + returns (bool) + { + address owner = ERC721.ownerOf(_tokenId); + return (_spender == owner || + isApprovedForAll(owner, _spender) || + getApproved(_tokenId) == _spender); + } + + /** + * @dev Safely mints `tokenId` and transfers it to `to`. + * + * Requirements: + * + * - `tokenId` must not exist. + * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. + * + * Emits a {Transfer} event. + */ + function _safeMint(address _to, uint256 _tokenId) internal virtual { + _safeMint(_to, _tokenId, ''); + } + + /** + * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is + * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. + */ + function _safeMint( + address _to, + uint256 _tokenId, + bytes memory _data + ) internal virtual { + _mint(_to, _tokenId); + + if (!_checkOnERC721Received(address(0), _to, _tokenId, _data)) { + revert MissingERC721Receiver(); + } + } + + /** + * @dev Mints `tokenId` and transfers it to `to`. + * + * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible + * + * Requirements: + * + * - `tokenId` must not exist. + * - `to` cannot be the zero address. + * + * Emits a {Transfer} event. + */ + function _mint(address _to, uint256 _tokenId) internal virtual { + if (_to == address(0)) { + revert ZeroAddress(); + } + + if (_exists(_tokenId)) { + revert TokenAlreadyMinted(); + } + + _beforeTokenTransfer(address(0), _to, _tokenId); + + _balances[_to] += 1; + _owners[_tokenId] = _to; + + emit Transfer(address(0), _to, _tokenId); + + _afterTokenTransfer(address(0), _to, _tokenId); + } + + /** + * @dev Destroys `tokenId`. + * The approval is cleared when the token is burned. + * + * Requirements: + * + * - `tokenId` must exist. + * + * Emits a {Transfer} event. + */ + function _burn(uint256 _tokenId) internal virtual { + address owner = ERC721.ownerOf(_tokenId); + + _beforeTokenTransfer(owner, address(0), _tokenId); + + // Clear approvals + _approve(address(0), _tokenId); + + _balances[owner] -= 1; + delete _owners[_tokenId]; + + emit Transfer(owner, address(0), _tokenId); + + _afterTokenTransfer(owner, address(0), _tokenId); + } + + /** + * @dev Transfers `tokenId` from `from` to `to`. + * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. + * + * Requirements: + * + * - `to` cannot be the zero address. + * - `tokenId` token must be owned by `from`. + * + * Emits a {Transfer} event. + */ + function _transfer( + address _from, + address _to, + uint256 _tokenId + ) internal virtual { + if (ERC721.ownerOf(_tokenId) != _from) { + revert IncorrectOwner(); + } + + if (_to == address(0)) { + revert ZeroAddress(); + } + _beforeTokenTransfer(_from, _to, _tokenId); + + // Clear approvals from the previous owner + _approve(address(0), _tokenId); + + _balances[_from] -= 1; + _balances[_to] += 1; + _owners[_tokenId] = _to; + + emit Transfer(_from, _to, _tokenId); + + _afterTokenTransfer(_from, _to, _tokenId); + } + + /** + * @dev Approve `to` to operate on `tokenId` + * + * Emits an {Approval} event. + */ + function _approve(address _to, uint256 _tokenId) internal virtual { + _tokenApprovals[_tokenId] = _to; + emit Approval(ERC721.ownerOf(_tokenId), _to, _tokenId); + } + + /** + * @dev Approve `operator` to operate on all of `owner` tokens + * + * Emits an {ApprovalForAll} event. + */ + function _setApprovalForAll( + address _owner, + address _operator, + bool _approved + ) internal virtual { + if (_operator == address(0)) { + revert ZeroAddress(); + } + if (_owner == _operator) { + revert SameOwnerAndOperator(); + } + + _operatorApprovals[_owner][_operator] = _approved; + emit ApprovalForAll(_owner, _operator, _approved); + } + + /** + * @dev Reverts if the `tokenId` has not been minted yet. + */ + function _requireMinted(uint256 _tokenId) internal view virtual { + if (!_exists(_tokenId)) { + revert InvalidTokenId(); + } + } + + /** + * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. + * The call is not executed if the target address is not a contract. + * + * @param _from address representing the previous owner of the given token ID + * @param _to target address that will receive the tokens + * @param _tokenId uint256 ID of the token to be transferred + * @param _data bytes optional data to send along with the call + * @return _bool whether the call correctly returned the expected magic value + */ + function _checkOnERC721Received( + address _from, + address _to, + uint256 _tokenId, + bytes memory _data + ) private returns (bool) { + if (_to.isContract()) { + try + IERC721Receiver(_to).onERC721Received(_msgSender(), _from, _tokenId, _data) + returns (bytes4 retval) { + return retval == IERC721Receiver.onERC721Received.selector; + } catch (bytes memory reason) { + if (reason.length == 0) { + revert MissingERC721Receiver(); + } else { + /// @solidity memory-safe-assembly + assembly { + revert(add(32, reason), mload(reason)) + } + } + } + } else { + return true; + } + } + + /** + * @dev Hook that is called before any token transfer. This includes minting + * and burning. + * + * Calling conditions: + * + * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be + * transferred to `to`. + * - When `from` is zero, `tokenId` will be minted for `to`. + * - When `to` is zero, ``from``'s `tokenId` will be burned. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _beforeTokenTransfer( + address _from, + address _to, + uint256 _tokenId + ) internal virtual {} + + /** + * @dev Hook that is called after any transfer of tokens. This includes + * minting and burning. + * + * Calling conditions: + * + * - when `from` and `to` are both non-zero. + * - `from` and `to` are never both zero. + * + * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. + */ + function _afterTokenTransfer( + address _from, + address _to, + uint256 _tokenId + ) internal virtual {} } From 871e45142cedd7db0e20b7f738276c31271fb2b5 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Mon, 13 Jun 2022 17:18:20 -0400 Subject: [PATCH 03/20] lib update --- .../hyperverse-evm-erc721/source/erc721Library.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/hyperverse-evm-erc721/source/erc721Library.ts b/packages/hyperverse-evm-erc721/source/erc721Library.ts index 49dde2af..aac52558 100644 --- a/packages/hyperverse-evm-erc721/source/erc721Library.ts +++ b/packages/hyperverse-evm-erc721/source/erc721Library.ts @@ -42,7 +42,7 @@ export async function ERC721LibraryInternal( }; - const ownerMint = async (to: string) => { + const tenantMint = async (to: string) => { try { const mintTxn = await base.proxyContract?.tenantMint(to); return mintTxn.wait() as TransactionReceipt; @@ -51,6 +51,16 @@ export async function ERC721LibraryInternal( } }; + const tenantMintUri = async (to: string, tokenUri: string) => { + try { + const mintTxn = await base.proxyContract?.tenantMint(to, tokenUri); + return mintTxn.wait() as TransactionReceipt; + } catch (error) { + throw error; + } + }; + + const getBaseURI = async () => { try { const baseURI = await base.proxyContract?.getBaseURI(); @@ -167,7 +177,8 @@ export async function ERC721LibraryInternal( return { ...base, mint, - ownerMint, + tenantMint, + tenantMintUri, getBaseURI, setMintPrice, setBaseURI, From 827a633f30c6fdac929f90569ccdaf9d3225f5d4 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Mon, 13 Jun 2022 19:13:58 -0400 Subject: [PATCH 04/20] package updates --- .../contracts/ERC721.sol/ERC721.json | 14 ++-- .../ERC721Factory.sol/ERC721Factory.json | 4 +- packages/hyperverse-evm-erc721/contracts.json | 4 +- .../contracts/ERC721.sol | 11 ++-- .../source/erc721Library.ts | 64 ++++++++++++------- 5 files changed, 60 insertions(+), 37 deletions(-) diff --git a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json index 6aa05c77..d29c843f 100644 --- a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json +++ b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json @@ -562,7 +562,13 @@ } ], "name": "tenantMint", - "outputs": [], + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], "stateMutability": "nonpayable", "type": "function" }, @@ -587,7 +593,7 @@ "type": "uint256" } ], - "stateMutability": "payable", + "stateMutability": "nonpayable", "type": "function" }, { @@ -653,8 +659,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b5060405162003b5e38038062003b5e83398181016040528101906200003791906200040c565b60016000819055506040518060a001604052806040518060400160405280600681526020017f4552433732310000000000000000000000000000000000000000000000000000815250815260200160405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c6c696e6b2e6e6574000000000000000081525081525081526020016040518060400160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250815260200165032a361e860667ffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c4c696e6b2e6e657400000000000000008152508152506002600082015181600001908051906020019062000194929190620002b4565b5060208201518160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906200020392919062000345565b505050604082015181600301908051906020019062000224929190620002b4565b5060608201518160040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550608082015181600501908051906020019062000272929190620002b4565b509050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050620004eb565b828054620002c2906200046c565b90600052602060002090601f016020900481019282620002e6576000855562000332565b82601f106200030157805160ff191683800117855562000332565b8280016001018555821562000332579182015b828111156200033157825182559160200191906001019062000314565b5b509050620003419190620003d6565b5090565b82805462000353906200046c565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b6000815190506200040681620004d1565b92915050565b6000602082840312156200041f57600080fd5b60006200042f84828501620003f5565b91505092915050565b600062000445826200044c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048557607f821691505b602082108114156200049c576200049b620004a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620004dc8162000438565b8114620004e857600080fd5b50565b60805160601c6136546200050a60003960006117a101526136546000f3fe60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105ac578063ce606ee0146105e9578063e985e9c514610614578063f4a0a528146106515761019c565b8063a035b1fe1461052f578063a22cb4651461055a578063b88d4fde146105835761019c565b80636a627842116100c65780636a6278421461046c57806370a082311461049c578063714c5398146104d957806395d89b41146105045761019c565b806355f804b3146103dd5780635aca1bb6146104065780636352211e1461042f5761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103455780633ccfd60b1461037457806342842e0e1461038b57806349df728c146103b45761019c565b8063217cc2b4146102c357806323b872dd146102ec57806327fbceac146103155761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612bdc565b61067a565b6040516101d59190612fd6565b60405180910390f35b3480156101ea57600080fd5b506101f361075c565b604051610200919061307b565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612c98565b6107ee565b005b34801561023e57600080fd5b5061025960048036038101906102549190612d17565b610975565b6040516102669190612f46565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612b4e565b6109bb565b005b3480156102a457600080fd5b506102ad610ac4565b6040516102ba9190612fd6565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061298b565b610ad7565b005b3480156102f857600080fd5b50610313600480360381019061030e91906129f0565b610b72565b005b61032f600480360381019061032a9190612af6565b610bc9565b60405161033c91906130dd565b60405180910390f35b34801561035157600080fd5b5061035a610ca3565b60405161036b959493929190612ff1565b60405180910390f35b34801561038057600080fd5b50610389610f65565b005b34801561039757600080fd5b506103b260048036038101906103ad91906129f0565b61103b565b005b3480156103c057600080fd5b506103db60048036038101906103d69190612c2e565b61105b565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612c57565b611201565b005b34801561041257600080fd5b5061042d60048036038101906104289190612b8a565b6112a2565b005b34801561043b57600080fd5b5061045660048036038101906104519190612d17565b611346565b6040516104639190612f46565b60405180910390f35b6104866004803603810190610481919061298b565b6113ef565b60405161049391906130dd565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061298b565b6114ef565b6040516104d091906130dd565b60405180910390f35b3480156104e557600080fd5b506104ee61159e565b6040516104fb919061307b565b60405180910390f35b34801561051057600080fd5b50610519611630565b604051610526919061307b565b60405180910390f35b34801561053b57600080fd5b506105446116c2565b60405161055191906130dd565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612aba565b6116c8565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190612a3f565b6116de565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190612d17565b611737565b6040516105e0919061307b565b60405180910390f35b3480156105f557600080fd5b506105fe61179f565b60405161060b9190612f46565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906129b4565b6117c3565b6040516106489190612fd6565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190612d17565b611857565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107555750610754826118e8565b5b9050919050565b6060600b805461076b90613389565b80601f016020809104026020016040519081016040528092919081815260200182805461079790613389565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905090565b60006107fa6001611952565b9050801561081d5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a6576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108bc9291906126a0565b5083600c90805190602001906108d39291906126a0565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050801561096f5760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516109669190613060565b60405180910390a15b50505050565b600061098082611a44565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c682611346565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2e576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a4d611a86565b73ffffffffffffffffffffffffffffffffffffffff16141580610a7e5750610a7c81610a77611a86565b6117c3565b155b15610ab5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610abf8383611a8e565b505050565b600f60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b6f81610b6a611b47565b611b62565b50565b610b83610b7d611a86565b82611b80565b610bb9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc4838383611c15565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5c611b47565b9050610c688582611b62565b6000848490501115610c98578383601460008481526020019081526020016000209190610c96929190612726565b505b809150509392505050565b6002806000018054610cb490613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce090613389565b8015610d2d5780601f10610d0257610100808354040283529160200191610d2d565b820191906000526020600020905b815481529060010190602001808311610d1057829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610da890613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd490613389565b8015610e215780601f10610df657610100808354040283529160200191610e21565b820191906000526020600020905b815481529060010190602001808311610e0457829003601f168201915b50505050508152505090806003018054610e3a90613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6690613389565b8015610eb35780601f10610e8857610100808354040283529160200191610eb3565b820191906000526020600020905b815481529060010190602001808311610e9657829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610ee290613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0e90613389565b8015610f5b5780601f10610f3057610100808354040283529160200191610f5b565b820191906000526020600020905b815481529060010190602001808311610f3e57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611037573d6000803e3d6000fd5b5050565b611056838383604051806020016040528060008152506116de565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161111d9190612f46565b60206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190612d40565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016111aa929190612fad565b602060405180830381600087803b1580156111c457600080fd5b505af11580156111d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fc9190612bb3565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611288576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d908051906020019061129e9291906126a0565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611329576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e6576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e906130bd565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff161515141561148d576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146114c8576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114d2611b47565b90506114de8382611b62565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611557576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546115ad90613389565b80601f01602080910402602001604051908101604052809291908181526020018280546115d990613389565b80156116265780601f106115fb57610100808354040283529160200191611626565b820191906000526020600020905b81548152906001019060200180831161160957829003601f168201915b5050505050905090565b6060600c805461163f90613389565b80601f016020809104026020016040519081016040528092919081815260200182805461166b90613389565b80156116b85780601f1061168d576101008083540402835291602001916116b8565b820191906000526020600020905b81548152906001019060200180831161169b57829003601f168201915b5050505050905090565b600e5481565b6116da6116d3611a86565b8383611e6a565b5050565b6116ef6116e9611a86565b83611b80565b611725576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61173184848484612035565b50505050565b606061174282611a44565b600061174c612088565b9050600081511161176c5760405180602001604052806000815250611797565b806117768461209f565b604051602001611787929190612f22565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118de576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156119c85760018260ff16148015611980575061197e3061224c565b155b6119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b69061309d565b60405180910390fd5b60009050611a3f565b8160ff16600160009054906101000a900460ff1660ff1610611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a169061309d565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611a4d8161225f565b611a83576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b0183611346565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b53600a6122cb565b611b5d600a6122e1565b905090565b611b7c8282604051806020016040528060008152506122ef565b5050565b600080611b8c83611346565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bce5750611bcd81856117c3565b5b80611c0c57508373ffffffffffffffffffffffffffffffffffffffff16611bf484610975565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c3582611346565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cf4838383612341565b611cff600082611a8e565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4f919061325a565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da691906131d3565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e65838383612346565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f37576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120289190612fd6565b60405180910390a3505050565b612040848484611c15565b61204c8484848461234b565b612082576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008214156120e7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612247565b600082905060005b60008214612119578080612102906133ec565b915050600a826121129190613229565b91506120ef565b60008167ffffffffffffffff81111561215b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561218d5781602001600182028036833780820191505090505b5090505b60008514612240576001826121a6919061325a565b9150600a856121b59190613435565b60306121c191906131d3565b60f81b8183815181106121fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122399190613229565b9450612191565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6122f983836124d9565b612306600084848461234b565b61233c576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b600061236c8473ffffffffffffffffffffffffffffffffffffffff1661224c565b156124cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612395611a86565b8786866040518563ffffffff1660e01b81526004016123b79493929190612f61565b602060405180830381600087803b1580156123d157600080fd5b505af192505050801561240257506040513d601f19601f820116820180604052508101906123ff9190612c05565b60015b61247c573d8060008114612432576040519150601f19603f3d011682016040523d82523d6000602084013e612437565b606091505b50600081511415612474576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124d1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612540576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125498161225f565b1561257f576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61258b60008383612341565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125db91906131d3565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461269c60008383612346565b5050565b8280546126ac90613389565b90600052602060002090601f0160209004810192826126ce5760008555612715565b82601f106126e757805160ff1916838001178555612715565b82800160010185558215612715579182015b828111156127145782518255916020019190600101906126f9565b5b50905061272291906127ac565b5090565b82805461273290613389565b90600052602060002090601f016020900481019282612754576000855561279b565b82601f1061276d57803560ff191683800117855561279b565b8280016001018555821561279b579182015b8281111561279a57823582559160200191906001019061277f565b5b5090506127a891906127ac565b5090565b5b808211156127c55760008160009055506001016127ad565b5090565b60006127dc6127d78461311d565b6130f8565b9050828152602081018484840111156127f457600080fd5b6127ff848285613347565b509392505050565b600061281a6128158461314e565b6130f8565b90508281526020810184848401111561283257600080fd5b61283d848285613347565b509392505050565b600081359050612854816135ab565b92915050565b600081359050612869816135c2565b92915050565b60008151905061287e816135c2565b92915050565b600081359050612893816135d9565b92915050565b6000815190506128a8816135d9565b92915050565b600082601f8301126128bf57600080fd5b81356128cf8482602086016127c9565b91505092915050565b6000813590506128e7816135f0565b92915050565b60008083601f8401126128ff57600080fd5b8235905067ffffffffffffffff81111561291857600080fd5b60208301915083600182028301111561293057600080fd5b9250929050565b600082601f83011261294857600080fd5b8135612958848260208601612807565b91505092915050565b60008135905061297081613607565b92915050565b60008151905061298581613607565b92915050565b60006020828403121561299d57600080fd5b60006129ab84828501612845565b91505092915050565b600080604083850312156129c757600080fd5b60006129d585828601612845565b92505060206129e685828601612845565b9150509250929050565b600080600060608486031215612a0557600080fd5b6000612a1386828701612845565b9350506020612a2486828701612845565b9250506040612a3586828701612961565b9150509250925092565b60008060008060808587031215612a5557600080fd5b6000612a6387828801612845565b9450506020612a7487828801612845565b9350506040612a8587828801612961565b925050606085013567ffffffffffffffff811115612aa257600080fd5b612aae878288016128ae565b91505092959194509250565b60008060408385031215612acd57600080fd5b6000612adb85828601612845565b9250506020612aec8582860161285a565b9150509250929050565b600080600060408486031215612b0b57600080fd5b6000612b1986828701612845565b935050602084013567ffffffffffffffff811115612b3657600080fd5b612b42868287016128ed565b92509250509250925092565b60008060408385031215612b6157600080fd5b6000612b6f85828601612845565b9250506020612b8085828601612961565b9150509250929050565b600060208284031215612b9c57600080fd5b6000612baa8482850161285a565b91505092915050565b600060208284031215612bc557600080fd5b6000612bd38482850161286f565b91505092915050565b600060208284031215612bee57600080fd5b6000612bfc84828501612884565b91505092915050565b600060208284031215612c1757600080fd5b6000612c2584828501612899565b91505092915050565b600060208284031215612c4057600080fd5b6000612c4e848285016128d8565b91505092915050565b600060208284031215612c6957600080fd5b600082013567ffffffffffffffff811115612c8357600080fd5b612c8f84828501612937565b91505092915050565b600080600060608486031215612cad57600080fd5b600084013567ffffffffffffffff811115612cc757600080fd5b612cd386828701612937565b935050602084013567ffffffffffffffff811115612cf057600080fd5b612cfc86828701612937565b9250506040612d0d86828701612845565b9150509250925092565b600060208284031215612d2957600080fd5b6000612d3784828501612961565b91505092915050565b600060208284031215612d5257600080fd5b6000612d6084828501612976565b91505092915050565b612d728161328e565b82525050565b612d818161328e565b82525050565b612d90816132a0565b82525050565b6000612da18261317f565b612dab8185613195565b9350612dbb818560208601613356565b612dc481613522565b840191505092915050565b612dd881613335565b82525050565b6000612de98261318a565b612df381856131a6565b9350612e03818560208601613356565b612e0c81613522565b840191505092915050565b6000612e228261318a565b612e2c81856131b7565b9350612e3c818560208601613356565b612e4581613522565b840191505092915050565b6000612e5b8261318a565b612e6581856131c8565b9350612e75818560208601613356565b80840191505092915050565b6000612e8e602e836131b7565b9150612e9982613533565b604082019050919050565b6000612eb1601f836131b7565b9150612ebc82613582565b602082019050919050565b6000604083016000830151612edf6000860182612d69565b5060208301518482036020860152612ef78282612dde565b9150508091505092915050565b612f0d8161330a565b82525050565b612f1c81613314565b82525050565b6000612f2e8285612e50565b9150612f3a8284612e50565b91508190509392505050565b6000602082019050612f5b6000830184612d78565b92915050565b6000608082019050612f766000830187612d78565b612f836020830186612d78565b612f906040830185612f04565b8181036060830152612fa28184612d96565b905095945050505050565b6000604082019050612fc26000830185612d78565b612fcf6020830184612f04565b9392505050565b6000602082019050612feb6000830184612d87565b92915050565b600060a082019050818103600083015261300b8188612d96565b9050818103602083015261301f8187612ec7565b905081810360408301526130338186612d96565b90506130426060830185612f13565b81810360808301526130548184612d96565b90509695505050505050565b60006020820190506130756000830184612dcf565b92915050565b600060208201905081810360008301526130958184612e17565b905092915050565b600060208201905081810360008301526130b681612e81565b9050919050565b600060208201905081810360008301526130d681612ea4565b9050919050565b60006020820190506130f26000830184612f04565b92915050565b6000613102613113565b905061310e82826133bb565b919050565b6000604051905090565b600067ffffffffffffffff821115613138576131376134f3565b5b61314182613522565b9050602081019050919050565b600067ffffffffffffffff821115613169576131686134f3565b5b61317282613522565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131de8261330a565b91506131e98361330a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561321e5761321d613466565b5b828201905092915050565b60006132348261330a565b915061323f8361330a565b92508261324f5761324e613495565b5b828204905092915050565b60006132658261330a565b91506132708361330a565b92508282101561328357613282613466565b5b828203905092915050565b6000613299826132ea565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006132e38261328e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061334082613328565b9050919050565b82818337600083830152505050565b60005b83811015613374578082015181840152602081019050613359565b83811115613383576000848401525b50505050565b600060028204905060018216806133a157607f821691505b602082108114156133b5576133b46134c4565b5b50919050565b6133c482613522565b810181811067ffffffffffffffff821117156133e3576133e26134f3565b5b80604052505050565b60006133f78261330a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561342a57613429613466565b5b600182019050919050565b60006134408261330a565b915061344b8361330a565b92508261345b5761345a613495565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6135b48161328e565b81146135bf57600080fd5b50565b6135cb816132a0565b81146135d657600080fd5b50565b6135e2816132ac565b81146135ed57600080fd5b50565b6135f9816132d8565b811461360457600080fd5b50565b6136108161330a565b811461361b57600080fd5b5056fea26469706673582212200ed637e339b54df237a60571cf3e14f417cf818f9ac1b93106fc0d679a8da4a564736f6c63430008040033", - "deployedBytecode": "0x60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105ac578063ce606ee0146105e9578063e985e9c514610614578063f4a0a528146106515761019c565b8063a035b1fe1461052f578063a22cb4651461055a578063b88d4fde146105835761019c565b80636a627842116100c65780636a6278421461046c57806370a082311461049c578063714c5398146104d957806395d89b41146105045761019c565b806355f804b3146103dd5780635aca1bb6146104065780636352211e1461042f5761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103455780633ccfd60b1461037457806342842e0e1461038b57806349df728c146103b45761019c565b8063217cc2b4146102c357806323b872dd146102ec57806327fbceac146103155761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612bdc565b61067a565b6040516101d59190612fd6565b60405180910390f35b3480156101ea57600080fd5b506101f361075c565b604051610200919061307b565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612c98565b6107ee565b005b34801561023e57600080fd5b5061025960048036038101906102549190612d17565b610975565b6040516102669190612f46565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612b4e565b6109bb565b005b3480156102a457600080fd5b506102ad610ac4565b6040516102ba9190612fd6565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061298b565b610ad7565b005b3480156102f857600080fd5b50610313600480360381019061030e91906129f0565b610b72565b005b61032f600480360381019061032a9190612af6565b610bc9565b60405161033c91906130dd565b60405180910390f35b34801561035157600080fd5b5061035a610ca3565b60405161036b959493929190612ff1565b60405180910390f35b34801561038057600080fd5b50610389610f65565b005b34801561039757600080fd5b506103b260048036038101906103ad91906129f0565b61103b565b005b3480156103c057600080fd5b506103db60048036038101906103d69190612c2e565b61105b565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190612c57565b611201565b005b34801561041257600080fd5b5061042d60048036038101906104289190612b8a565b6112a2565b005b34801561043b57600080fd5b5061045660048036038101906104519190612d17565b611346565b6040516104639190612f46565b60405180910390f35b6104866004803603810190610481919061298b565b6113ef565b60405161049391906130dd565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be919061298b565b6114ef565b6040516104d091906130dd565b60405180910390f35b3480156104e557600080fd5b506104ee61159e565b6040516104fb919061307b565b60405180910390f35b34801561051057600080fd5b50610519611630565b604051610526919061307b565b60405180910390f35b34801561053b57600080fd5b506105446116c2565b60405161055191906130dd565b60405180910390f35b34801561056657600080fd5b50610581600480360381019061057c9190612aba565b6116c8565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190612a3f565b6116de565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190612d17565b611737565b6040516105e0919061307b565b60405180910390f35b3480156105f557600080fd5b506105fe61179f565b60405161060b9190612f46565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906129b4565b6117c3565b6040516106489190612fd6565b60405180910390f35b34801561065d57600080fd5b5061067860048036038101906106739190612d17565b611857565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061074557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107555750610754826118e8565b5b9050919050565b6060600b805461076b90613389565b80601f016020809104026020016040519081016040528092919081815260200182805461079790613389565b80156107e45780601f106107b9576101008083540402835291602001916107e4565b820191906000526020600020905b8154815290600101906020018083116107c757829003601f168201915b5050505050905090565b60006107fa6001611952565b9050801561081d5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108a6576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108bc9291906126a0565b5083600c90805190602001906108d39291906126a0565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050801561096f5760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516109669190613060565b60405180910390a15b50505050565b600061098082611a44565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c682611346565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a2e576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a4d611a86565b73ffffffffffffffffffffffffffffffffffffffff16141580610a7e5750610a7c81610a77611a86565b6117c3565b155b15610ab5576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610abf8383611a8e565b505050565b600f60009054906101000a900460ff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b5e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b6f81610b6a611b47565b611b62565b50565b610b83610b7d611a86565b82611b80565b610bb9576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bc4838383611c15565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c52576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c5c611b47565b9050610c688582611b62565b6000848490501115610c98578383601460008481526020019081526020016000209190610c96929190612726565b505b809150509392505050565b6002806000018054610cb490613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce090613389565b8015610d2d5780601f10610d0257610100808354040283529160200191610d2d565b820191906000526020600020905b815481529060010190602001808311610d1057829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610da890613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610dd490613389565b8015610e215780601f10610df657610100808354040283529160200191610e21565b820191906000526020600020905b815481529060010190602001808311610e0457829003601f168201915b50505050508152505090806003018054610e3a90613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6690613389565b8015610eb35780601f10610e8857610100808354040283529160200191610eb3565b820191906000526020600020905b815481529060010190602001808311610e9657829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610ee290613389565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0e90613389565b8015610f5b5780601f10610f3057610100808354040283529160200191610f5b565b820191906000526020600020905b815481529060010190602001808311610f3e57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611037573d6000803e3d6000fd5b5050565b611056838383604051806020016040528060008152506116de565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110e2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161111d9190612f46565b60206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190612d40565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016111aa929190612fad565b602060405180830381600087803b1580156111c457600080fd5b505af11580156111d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111fc9190612bb3565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611288576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d908051906020019061129e9291906126a0565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611329576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e6576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142e906130bd565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff161515141561148d576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146114c8576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114d2611b47565b90506114de8382611b62565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611557576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546115ad90613389565b80601f01602080910402602001604051908101604052809291908181526020018280546115d990613389565b80156116265780601f106115fb57610100808354040283529160200191611626565b820191906000526020600020905b81548152906001019060200180831161160957829003601f168201915b5050505050905090565b6060600c805461163f90613389565b80601f016020809104026020016040519081016040528092919081815260200182805461166b90613389565b80156116b85780601f1061168d576101008083540402835291602001916116b8565b820191906000526020600020905b81548152906001019060200180831161169b57829003601f168201915b5050505050905090565b600e5481565b6116da6116d3611a86565b8383611e6a565b5050565b6116ef6116e9611a86565b83611b80565b611725576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61173184848484612035565b50505050565b606061174282611a44565b600061174c612088565b9050600081511161176c5760405180602001604052806000815250611797565b806117768461209f565b604051602001611787929190612f22565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118de576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156119c85760018260ff16148015611980575061197e3061224c565b155b6119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b69061309d565b60405180910390fd5b60009050611a3f565b8160ff16600160009054906101000a900460ff1660ff1610611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a169061309d565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611a4d8161225f565b611a83576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b0183611346565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b53600a6122cb565b611b5d600a6122e1565b905090565b611b7c8282604051806020016040528060008152506122ef565b5050565b600080611b8c83611346565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bce5750611bcd81856117c3565b5b80611c0c57508373ffffffffffffffffffffffffffffffffffffffff16611bf484610975565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c3582611346565b73ffffffffffffffffffffffffffffffffffffffff1614611c82576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ce9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cf4838383612341565b611cff600082611a8e565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d4f919061325a565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da691906131d3565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e65838383612346565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ed1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f37576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120289190612fd6565b60405180910390a3505050565b612040848484611c15565b61204c8484848461234b565b612082576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008214156120e7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612247565b600082905060005b60008214612119578080612102906133ec565b915050600a826121129190613229565b91506120ef565b60008167ffffffffffffffff81111561215b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561218d5781602001600182028036833780820191505090505b5090505b60008514612240576001826121a6919061325a565b9150600a856121b59190613435565b60306121c191906131d3565b60f81b8183815181106121fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122399190613229565b9450612191565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6122f983836124d9565b612306600084848461234b565b61233c576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b600061236c8473ffffffffffffffffffffffffffffffffffffffff1661224c565b156124cc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612395611a86565b8786866040518563ffffffff1660e01b81526004016123b79493929190612f61565b602060405180830381600087803b1580156123d157600080fd5b505af192505050801561240257506040513d601f19601f820116820180604052508101906123ff9190612c05565b60015b61247c573d8060008114612432576040519150601f19603f3d011682016040523d82523d6000602084013e612437565b606091505b50600081511415612474576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124d1565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612540576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125498161225f565b1561257f576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61258b60008383612341565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125db91906131d3565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461269c60008383612346565b5050565b8280546126ac90613389565b90600052602060002090601f0160209004810192826126ce5760008555612715565b82601f106126e757805160ff1916838001178555612715565b82800160010185558215612715579182015b828111156127145782518255916020019190600101906126f9565b5b50905061272291906127ac565b5090565b82805461273290613389565b90600052602060002090601f016020900481019282612754576000855561279b565b82601f1061276d57803560ff191683800117855561279b565b8280016001018555821561279b579182015b8281111561279a57823582559160200191906001019061277f565b5b5090506127a891906127ac565b5090565b5b808211156127c55760008160009055506001016127ad565b5090565b60006127dc6127d78461311d565b6130f8565b9050828152602081018484840111156127f457600080fd5b6127ff848285613347565b509392505050565b600061281a6128158461314e565b6130f8565b90508281526020810184848401111561283257600080fd5b61283d848285613347565b509392505050565b600081359050612854816135ab565b92915050565b600081359050612869816135c2565b92915050565b60008151905061287e816135c2565b92915050565b600081359050612893816135d9565b92915050565b6000815190506128a8816135d9565b92915050565b600082601f8301126128bf57600080fd5b81356128cf8482602086016127c9565b91505092915050565b6000813590506128e7816135f0565b92915050565b60008083601f8401126128ff57600080fd5b8235905067ffffffffffffffff81111561291857600080fd5b60208301915083600182028301111561293057600080fd5b9250929050565b600082601f83011261294857600080fd5b8135612958848260208601612807565b91505092915050565b60008135905061297081613607565b92915050565b60008151905061298581613607565b92915050565b60006020828403121561299d57600080fd5b60006129ab84828501612845565b91505092915050565b600080604083850312156129c757600080fd5b60006129d585828601612845565b92505060206129e685828601612845565b9150509250929050565b600080600060608486031215612a0557600080fd5b6000612a1386828701612845565b9350506020612a2486828701612845565b9250506040612a3586828701612961565b9150509250925092565b60008060008060808587031215612a5557600080fd5b6000612a6387828801612845565b9450506020612a7487828801612845565b9350506040612a8587828801612961565b925050606085013567ffffffffffffffff811115612aa257600080fd5b612aae878288016128ae565b91505092959194509250565b60008060408385031215612acd57600080fd5b6000612adb85828601612845565b9250506020612aec8582860161285a565b9150509250929050565b600080600060408486031215612b0b57600080fd5b6000612b1986828701612845565b935050602084013567ffffffffffffffff811115612b3657600080fd5b612b42868287016128ed565b92509250509250925092565b60008060408385031215612b6157600080fd5b6000612b6f85828601612845565b9250506020612b8085828601612961565b9150509250929050565b600060208284031215612b9c57600080fd5b6000612baa8482850161285a565b91505092915050565b600060208284031215612bc557600080fd5b6000612bd38482850161286f565b91505092915050565b600060208284031215612bee57600080fd5b6000612bfc84828501612884565b91505092915050565b600060208284031215612c1757600080fd5b6000612c2584828501612899565b91505092915050565b600060208284031215612c4057600080fd5b6000612c4e848285016128d8565b91505092915050565b600060208284031215612c6957600080fd5b600082013567ffffffffffffffff811115612c8357600080fd5b612c8f84828501612937565b91505092915050565b600080600060608486031215612cad57600080fd5b600084013567ffffffffffffffff811115612cc757600080fd5b612cd386828701612937565b935050602084013567ffffffffffffffff811115612cf057600080fd5b612cfc86828701612937565b9250506040612d0d86828701612845565b9150509250925092565b600060208284031215612d2957600080fd5b6000612d3784828501612961565b91505092915050565b600060208284031215612d5257600080fd5b6000612d6084828501612976565b91505092915050565b612d728161328e565b82525050565b612d818161328e565b82525050565b612d90816132a0565b82525050565b6000612da18261317f565b612dab8185613195565b9350612dbb818560208601613356565b612dc481613522565b840191505092915050565b612dd881613335565b82525050565b6000612de98261318a565b612df381856131a6565b9350612e03818560208601613356565b612e0c81613522565b840191505092915050565b6000612e228261318a565b612e2c81856131b7565b9350612e3c818560208601613356565b612e4581613522565b840191505092915050565b6000612e5b8261318a565b612e6581856131c8565b9350612e75818560208601613356565b80840191505092915050565b6000612e8e602e836131b7565b9150612e9982613533565b604082019050919050565b6000612eb1601f836131b7565b9150612ebc82613582565b602082019050919050565b6000604083016000830151612edf6000860182612d69565b5060208301518482036020860152612ef78282612dde565b9150508091505092915050565b612f0d8161330a565b82525050565b612f1c81613314565b82525050565b6000612f2e8285612e50565b9150612f3a8284612e50565b91508190509392505050565b6000602082019050612f5b6000830184612d78565b92915050565b6000608082019050612f766000830187612d78565b612f836020830186612d78565b612f906040830185612f04565b8181036060830152612fa28184612d96565b905095945050505050565b6000604082019050612fc26000830185612d78565b612fcf6020830184612f04565b9392505050565b6000602082019050612feb6000830184612d87565b92915050565b600060a082019050818103600083015261300b8188612d96565b9050818103602083015261301f8187612ec7565b905081810360408301526130338186612d96565b90506130426060830185612f13565b81810360808301526130548184612d96565b90509695505050505050565b60006020820190506130756000830184612dcf565b92915050565b600060208201905081810360008301526130958184612e17565b905092915050565b600060208201905081810360008301526130b681612e81565b9050919050565b600060208201905081810360008301526130d681612ea4565b9050919050565b60006020820190506130f26000830184612f04565b92915050565b6000613102613113565b905061310e82826133bb565b919050565b6000604051905090565b600067ffffffffffffffff821115613138576131376134f3565b5b61314182613522565b9050602081019050919050565b600067ffffffffffffffff821115613169576131686134f3565b5b61317282613522565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006131de8261330a565b91506131e98361330a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561321e5761321d613466565b5b828201905092915050565b60006132348261330a565b915061323f8361330a565b92508261324f5761324e613495565b5b828204905092915050565b60006132658261330a565b91506132708361330a565b92508282101561328357613282613466565b5b828203905092915050565b6000613299826132ea565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006132e38261328e565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061334082613328565b9050919050565b82818337600083830152505050565b60005b83811015613374578082015181840152602081019050613359565b83811115613383576000848401525b50505050565b600060028204905060018216806133a157607f821691505b602082108114156133b5576133b46134c4565b5b50919050565b6133c482613522565b810181811067ffffffffffffffff821117156133e3576133e26134f3565b5b80604052505050565b60006133f78261330a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561342a57613429613466565b5b600182019050919050565b60006134408261330a565b915061344b8361330a565b92508261345b5761345a613495565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6135b48161328e565b81146135bf57600080fd5b50565b6135cb816132a0565b81146135d657600080fd5b50565b6135e2816132ac565b81146135ed57600080fd5b50565b6135f9816132d8565b811461360457600080fd5b50565b6136108161330a565b811461361b57600080fd5b5056fea26469706673582212200ed637e339b54df237a60571cf3e14f417cf818f9ac1b93106fc0d679a8da4a564736f6c63430008040033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162003b8c38038062003b8c83398181016040528101906200003791906200040c565b60016000819055506040518060a001604052806040518060400160405280600681526020017f4552433732310000000000000000000000000000000000000000000000000000815250815260200160405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c6c696e6b2e6e6574000000000000000081525081525081526020016040518060400160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250815260200165032a361e860667ffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c4c696e6b2e6e657400000000000000008152508152506002600082015181600001908051906020019062000194929190620002b4565b5060208201518160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906200020392919062000345565b505050604082015181600301908051906020019062000224929190620002b4565b5060608201518160040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550608082015181600501908051906020019062000272929190620002b4565b509050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050620004eb565b828054620002c2906200046c565b90600052602060002090601f016020900481019282620002e6576000855562000332565b82601f106200030157805160ff191683800117855562000332565b8280016001018555821562000332579182015b828111156200033157825182559160200191906001019062000314565b5b509050620003419190620003d6565b5090565b82805462000353906200046c565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b6000815190506200040681620004d1565b92915050565b6000602082840312156200041f57600080fd5b60006200042f84828501620003f5565b91505092915050565b600062000445826200044c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048557607f821691505b602082108114156200049c576200049b620004a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620004dc8162000438565b8114620004e857600080fd5b50565b60805160601c6136826200050a60003960006117cf01526136826000f3fe60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105cd578063ce606ee01461060a578063e985e9c514610635578063f4a0a528146106725761019c565b8063a035b1fe14610550578063a22cb4651461057b578063b88d4fde146105a45761019c565b80636a627842116100c65780636a6278421461048d57806370a08231146104bd578063714c5398146104fa57806395d89b41146105255761019c565b806355f804b3146103fe5780635aca1bb6146104275780636352211e146104505761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103665780633ccfd60b1461039557806342842e0e146103ac57806349df728c146103d55761019c565b8063217cc2b4146102c357806323b872dd1461030057806327fbceac146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612c0a565b61069b565b6040516101d59190613004565b60405180910390f35b3480156101ea57600080fd5b506101f361077d565b60405161020091906130a9565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612cc6565b61080f565b005b34801561023e57600080fd5b5061025960048036038101906102549190612d45565b610996565b6040516102669190612f74565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612b7c565b6109dc565b005b3480156102a457600080fd5b506102ad610ae5565b6040516102ba9190613004565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906129b9565b610af8565b6040516102f7919061310b565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612a1e565b610ba0565b005b34801561033557600080fd5b50610350600480360381019061034b9190612b24565b610bf7565b60405161035d919061310b565b60405180910390f35b34801561037257600080fd5b5061037b610cd1565b60405161038c95949392919061301f565b60405180910390f35b3480156103a157600080fd5b506103aa610f93565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612a1e565b611069565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612c5c565b611089565b005b34801561040a57600080fd5b5061042560048036038101906104209190612c85565b61122f565b005b34801561043357600080fd5b5061044e60048036038101906104499190612bb8565b6112d0565b005b34801561045c57600080fd5b5061047760048036038101906104729190612d45565b611374565b6040516104849190612f74565b60405180910390f35b6104a760048036038101906104a291906129b9565b61141d565b6040516104b4919061310b565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906129b9565b61151d565b6040516104f1919061310b565b60405180910390f35b34801561050657600080fd5b5061050f6115cc565b60405161051c91906130a9565b60405180910390f35b34801561053157600080fd5b5061053a61165e565b60405161054791906130a9565b60405180910390f35b34801561055c57600080fd5b506105656116f0565b604051610572919061310b565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612ae8565b6116f6565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190612a6d565b61170c565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190612d45565b611765565b60405161060191906130a9565b60405180910390f35b34801561061657600080fd5b5061061f6117cd565b60405161062c9190612f74565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906129e2565b6117f1565b6040516106699190613004565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612d45565b611885565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610776575061077582611916565b5b9050919050565b6060600b805461078c906133b7565b80601f01602080910402602001604051908101604052809291908181526020018280546107b8906133b7565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b600061081b6001611980565b9050801561083e5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108c7576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108dd9291906126ce565b5083600c90805190602001906108f49291906126ce565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156109905760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610987919061308e565b60405180910390a15b50505050565b60006109a182611a72565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e782611374565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a4f576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6e611ab4565b73ffffffffffffffffffffffffffffffffffffffff16141580610a9f5750610a9d81610a98611ab4565b6117f1565b155b15610ad6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae08383611abc565b505050565b600f60009054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b8b611b75565b9050610b978382611b90565b80915050919050565b610bb1610bab611ab4565b82611bae565b610be7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf2838383611c43565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c80576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c8a611b75565b9050610c968582611b90565b6000848490501115610cc6578383601460008481526020019081526020016000209190610cc4929190612754565b505b809150509392505050565b6002806000018054610ce2906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e906133b7565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610dd6906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e02906133b7565b8015610e4f5780601f10610e2457610100808354040283529160200191610e4f565b820191906000526020600020905b815481529060010190602001808311610e3257829003601f168201915b50505050508152505090806003018054610e68906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e94906133b7565b8015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610f10906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3c906133b7565b8015610f895780601f10610f5e57610100808354040283529160200191610f89565b820191906000526020600020905b815481529060010190602001808311610f6c57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611065573d6000803e3d6000fd5b5050565b6110848383836040518060200160405280600081525061170c565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611110576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161114b9190612f74565b60206040518083038186803b15801561116357600080fd5b505afa158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b9190612d6e565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016111d8929190612fdb565b602060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a9190612be1565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90805190602001906112cc9291906126ce565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611357576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611414576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c906130eb565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff16151514156114bb576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146114f6576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611500611b75565b905061150c8382611b90565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611585576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546115db906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611607906133b7565b80156116545780601f1061162957610100808354040283529160200191611654565b820191906000526020600020905b81548152906001019060200180831161163757829003601f168201915b5050505050905090565b6060600c805461166d906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611699906133b7565b80156116e65780601f106116bb576101008083540402835291602001916116e6565b820191906000526020600020905b8154815290600101906020018083116116c957829003601f168201915b5050505050905090565b600e5481565b611708611701611ab4565b8383611e98565b5050565b61171d611717611ab4565b83611bae565b611753576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175f84848484612063565b50505050565b606061177082611a72565b600061177a6120b6565b9050600081511161179a57604051806020016040528060008152506117c5565b806117a4846120cd565b6040516020016117b5929190612f50565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461190c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156119f65760018260ff161480156119ae57506119ac3061227a565b155b6119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e4906130cb565b60405180910390fd5b60009050611a6d565b8160ff16600160009054906101000a900460ff1660ff1610611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906130cb565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611a7b8161228d565b611ab1576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b2f83611374565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b81600a6122f9565b611b8b600a61230f565b905090565b611baa82826040518060200160405280600081525061231d565b5050565b600080611bba83611374565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bfc5750611bfb81856117f1565b5b80611c3a57508373ffffffffffffffffffffffffffffffffffffffff16611c2284610996565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c6382611374565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d17576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2283838361236f565b611d2d600082611abc565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7d9190613288565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd49190613201565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e93838383612374565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f65576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120569190613004565b60405180910390a3505050565b61206e848484611c43565b61207a84848484612379565b6120b0576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415612115576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612275565b600082905060005b600082146121475780806121309061341a565b915050600a826121409190613257565b915061211d565b60008167ffffffffffffffff811115612189577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121bb5781602001600182028036833780820191505090505b5090505b6000851461226e576001826121d49190613288565b9150600a856121e39190613463565b60306121ef9190613201565b60f81b81838151811061222b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122679190613257565b94506121bf565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6123278383612507565b6123346000848484612379565b61236a576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b600061239a8473ffffffffffffffffffffffffffffffffffffffff1661227a565b156124fa578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c3611ab4565b8786866040518563ffffffff1660e01b81526004016123e59493929190612f8f565b602060405180830381600087803b1580156123ff57600080fd5b505af192505050801561243057506040513d601f19601f8201168201806040525081019061242d9190612c33565b60015b6124aa573d8060008114612460576040519150601f19603f3d011682016040523d82523d6000602084013e612465565b606091505b506000815114156124a2576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124ff565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561256e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125778161228d565b156125ad576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125b96000838361236f565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126099190613201565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126ca60008383612374565b5050565b8280546126da906133b7565b90600052602060002090601f0160209004810192826126fc5760008555612743565b82601f1061271557805160ff1916838001178555612743565b82800160010185558215612743579182015b82811115612742578251825591602001919060010190612727565b5b50905061275091906127da565b5090565b828054612760906133b7565b90600052602060002090601f01602090048101928261278257600085556127c9565b82601f1061279b57803560ff19168380011785556127c9565b828001600101855582156127c9579182015b828111156127c85782358255916020019190600101906127ad565b5b5090506127d691906127da565b5090565b5b808211156127f35760008160009055506001016127db565b5090565b600061280a6128058461314b565b613126565b90508281526020810184848401111561282257600080fd5b61282d848285613375565b509392505050565b60006128486128438461317c565b613126565b90508281526020810184848401111561286057600080fd5b61286b848285613375565b509392505050565b600081359050612882816135d9565b92915050565b600081359050612897816135f0565b92915050565b6000815190506128ac816135f0565b92915050565b6000813590506128c181613607565b92915050565b6000815190506128d681613607565b92915050565b600082601f8301126128ed57600080fd5b81356128fd8482602086016127f7565b91505092915050565b6000813590506129158161361e565b92915050565b60008083601f84011261292d57600080fd5b8235905067ffffffffffffffff81111561294657600080fd5b60208301915083600182028301111561295e57600080fd5b9250929050565b600082601f83011261297657600080fd5b8135612986848260208601612835565b91505092915050565b60008135905061299e81613635565b92915050565b6000815190506129b381613635565b92915050565b6000602082840312156129cb57600080fd5b60006129d984828501612873565b91505092915050565b600080604083850312156129f557600080fd5b6000612a0385828601612873565b9250506020612a1485828601612873565b9150509250929050565b600080600060608486031215612a3357600080fd5b6000612a4186828701612873565b9350506020612a5286828701612873565b9250506040612a638682870161298f565b9150509250925092565b60008060008060808587031215612a8357600080fd5b6000612a9187828801612873565b9450506020612aa287828801612873565b9350506040612ab38782880161298f565b925050606085013567ffffffffffffffff811115612ad057600080fd5b612adc878288016128dc565b91505092959194509250565b60008060408385031215612afb57600080fd5b6000612b0985828601612873565b9250506020612b1a85828601612888565b9150509250929050565b600080600060408486031215612b3957600080fd5b6000612b4786828701612873565b935050602084013567ffffffffffffffff811115612b6457600080fd5b612b708682870161291b565b92509250509250925092565b60008060408385031215612b8f57600080fd5b6000612b9d85828601612873565b9250506020612bae8582860161298f565b9150509250929050565b600060208284031215612bca57600080fd5b6000612bd884828501612888565b91505092915050565b600060208284031215612bf357600080fd5b6000612c018482850161289d565b91505092915050565b600060208284031215612c1c57600080fd5b6000612c2a848285016128b2565b91505092915050565b600060208284031215612c4557600080fd5b6000612c53848285016128c7565b91505092915050565b600060208284031215612c6e57600080fd5b6000612c7c84828501612906565b91505092915050565b600060208284031215612c9757600080fd5b600082013567ffffffffffffffff811115612cb157600080fd5b612cbd84828501612965565b91505092915050565b600080600060608486031215612cdb57600080fd5b600084013567ffffffffffffffff811115612cf557600080fd5b612d0186828701612965565b935050602084013567ffffffffffffffff811115612d1e57600080fd5b612d2a86828701612965565b9250506040612d3b86828701612873565b9150509250925092565b600060208284031215612d5757600080fd5b6000612d658482850161298f565b91505092915050565b600060208284031215612d8057600080fd5b6000612d8e848285016129a4565b91505092915050565b612da0816132bc565b82525050565b612daf816132bc565b82525050565b612dbe816132ce565b82525050565b6000612dcf826131ad565b612dd981856131c3565b9350612de9818560208601613384565b612df281613550565b840191505092915050565b612e0681613363565b82525050565b6000612e17826131b8565b612e2181856131d4565b9350612e31818560208601613384565b612e3a81613550565b840191505092915050565b6000612e50826131b8565b612e5a81856131e5565b9350612e6a818560208601613384565b612e7381613550565b840191505092915050565b6000612e89826131b8565b612e9381856131f6565b9350612ea3818560208601613384565b80840191505092915050565b6000612ebc602e836131e5565b9150612ec782613561565b604082019050919050565b6000612edf601f836131e5565b9150612eea826135b0565b602082019050919050565b6000604083016000830151612f0d6000860182612d97565b5060208301518482036020860152612f258282612e0c565b9150508091505092915050565b612f3b81613338565b82525050565b612f4a81613342565b82525050565b6000612f5c8285612e7e565b9150612f688284612e7e565b91508190509392505050565b6000602082019050612f896000830184612da6565b92915050565b6000608082019050612fa46000830187612da6565b612fb16020830186612da6565b612fbe6040830185612f32565b8181036060830152612fd08184612dc4565b905095945050505050565b6000604082019050612ff06000830185612da6565b612ffd6020830184612f32565b9392505050565b60006020820190506130196000830184612db5565b92915050565b600060a08201905081810360008301526130398188612dc4565b9050818103602083015261304d8187612ef5565b905081810360408301526130618186612dc4565b90506130706060830185612f41565b81810360808301526130828184612dc4565b90509695505050505050565b60006020820190506130a36000830184612dfd565b92915050565b600060208201905081810360008301526130c38184612e45565b905092915050565b600060208201905081810360008301526130e481612eaf565b9050919050565b6000602082019050818103600083015261310481612ed2565b9050919050565b60006020820190506131206000830184612f32565b92915050565b6000613130613141565b905061313c82826133e9565b919050565b6000604051905090565b600067ffffffffffffffff82111561316657613165613521565b5b61316f82613550565b9050602081019050919050565b600067ffffffffffffffff82111561319757613196613521565b5b6131a082613550565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061320c82613338565b915061321783613338565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561324c5761324b613494565b5b828201905092915050565b600061326282613338565b915061326d83613338565b92508261327d5761327c6134c3565b5b828204905092915050565b600061329382613338565b915061329e83613338565b9250828210156132b1576132b0613494565b5b828203905092915050565b60006132c782613318565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613311826132bc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061336e82613356565b9050919050565b82818337600083830152505050565b60005b838110156133a2578082015181840152602081019050613387565b838111156133b1576000848401525b50505050565b600060028204905060018216806133cf57607f821691505b602082108114156133e3576133e26134f2565b5b50919050565b6133f282613550565b810181811067ffffffffffffffff8211171561341157613410613521565b5b80604052505050565b600061342582613338565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561345857613457613494565b5b600182019050919050565b600061346e82613338565b915061347983613338565b925082613489576134886134c3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6135e2816132bc565b81146135ed57600080fd5b50565b6135f9816132ce565b811461360457600080fd5b50565b613610816132da565b811461361b57600080fd5b50565b61362781613306565b811461363257600080fd5b50565b61363e81613338565b811461364957600080fd5b5056fea264697066735822122023e2bc9c0c4e122f629aa2a96697da1c08eebbca2e701727f29c2a4917819aa064736f6c63430008040033", + "deployedBytecode": "0x60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105cd578063ce606ee01461060a578063e985e9c514610635578063f4a0a528146106725761019c565b8063a035b1fe14610550578063a22cb4651461057b578063b88d4fde146105a45761019c565b80636a627842116100c65780636a6278421461048d57806370a08231146104bd578063714c5398146104fa57806395d89b41146105255761019c565b806355f804b3146103fe5780635aca1bb6146104275780636352211e146104505761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103665780633ccfd60b1461039557806342842e0e146103ac57806349df728c146103d55761019c565b8063217cc2b4146102c357806323b872dd1461030057806327fbceac146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612c0a565b61069b565b6040516101d59190613004565b60405180910390f35b3480156101ea57600080fd5b506101f361077d565b60405161020091906130a9565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612cc6565b61080f565b005b34801561023e57600080fd5b5061025960048036038101906102549190612d45565b610996565b6040516102669190612f74565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612b7c565b6109dc565b005b3480156102a457600080fd5b506102ad610ae5565b6040516102ba9190613004565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906129b9565b610af8565b6040516102f7919061310b565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612a1e565b610ba0565b005b34801561033557600080fd5b50610350600480360381019061034b9190612b24565b610bf7565b60405161035d919061310b565b60405180910390f35b34801561037257600080fd5b5061037b610cd1565b60405161038c95949392919061301f565b60405180910390f35b3480156103a157600080fd5b506103aa610f93565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612a1e565b611069565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612c5c565b611089565b005b34801561040a57600080fd5b5061042560048036038101906104209190612c85565b61122f565b005b34801561043357600080fd5b5061044e60048036038101906104499190612bb8565b6112d0565b005b34801561045c57600080fd5b5061047760048036038101906104729190612d45565b611374565b6040516104849190612f74565b60405180910390f35b6104a760048036038101906104a291906129b9565b61141d565b6040516104b4919061310b565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906129b9565b61151d565b6040516104f1919061310b565b60405180910390f35b34801561050657600080fd5b5061050f6115cc565b60405161051c91906130a9565b60405180910390f35b34801561053157600080fd5b5061053a61165e565b60405161054791906130a9565b60405180910390f35b34801561055c57600080fd5b506105656116f0565b604051610572919061310b565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612ae8565b6116f6565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190612a6d565b61170c565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190612d45565b611765565b60405161060191906130a9565b60405180910390f35b34801561061657600080fd5b5061061f6117cd565b60405161062c9190612f74565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906129e2565b6117f1565b6040516106699190613004565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612d45565b611885565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610776575061077582611916565b5b9050919050565b6060600b805461078c906133b7565b80601f01602080910402602001604051908101604052809291908181526020018280546107b8906133b7565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b600061081b6001611980565b9050801561083e5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108c7576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108dd9291906126ce565b5083600c90805190602001906108f49291906126ce565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156109905760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610987919061308e565b60405180910390a15b50505050565b60006109a182611a72565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e782611374565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a4f576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6e611ab4565b73ffffffffffffffffffffffffffffffffffffffff16141580610a9f5750610a9d81610a98611ab4565b6117f1565b155b15610ad6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae08383611abc565b505050565b600f60009054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b8b611b75565b9050610b978382611b90565b80915050919050565b610bb1610bab611ab4565b82611bae565b610be7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf2838383611c43565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c80576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c8a611b75565b9050610c968582611b90565b6000848490501115610cc6578383601460008481526020019081526020016000209190610cc4929190612754565b505b809150509392505050565b6002806000018054610ce2906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e906133b7565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610dd6906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e02906133b7565b8015610e4f5780601f10610e2457610100808354040283529160200191610e4f565b820191906000526020600020905b815481529060010190602001808311610e3257829003601f168201915b50505050508152505090806003018054610e68906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e94906133b7565b8015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610f10906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3c906133b7565b8015610f895780601f10610f5e57610100808354040283529160200191610f89565b820191906000526020600020905b815481529060010190602001808311610f6c57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611065573d6000803e3d6000fd5b5050565b6110848383836040518060200160405280600081525061170c565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611110576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161114b9190612f74565b60206040518083038186803b15801561116357600080fd5b505afa158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b9190612d6e565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016111d8929190612fdb565b602060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a9190612be1565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90805190602001906112cc9291906126ce565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611357576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611414576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c906130eb565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff16151514156114bb576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146114f6576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611500611b75565b905061150c8382611b90565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611585576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546115db906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611607906133b7565b80156116545780601f1061162957610100808354040283529160200191611654565b820191906000526020600020905b81548152906001019060200180831161163757829003601f168201915b5050505050905090565b6060600c805461166d906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611699906133b7565b80156116e65780601f106116bb576101008083540402835291602001916116e6565b820191906000526020600020905b8154815290600101906020018083116116c957829003601f168201915b5050505050905090565b600e5481565b611708611701611ab4565b8383611e98565b5050565b61171d611717611ab4565b83611bae565b611753576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175f84848484612063565b50505050565b606061177082611a72565b600061177a6120b6565b9050600081511161179a57604051806020016040528060008152506117c5565b806117a4846120cd565b6040516020016117b5929190612f50565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461190c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156119f65760018260ff161480156119ae57506119ac3061227a565b155b6119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e4906130cb565b60405180910390fd5b60009050611a6d565b8160ff16600160009054906101000a900460ff1660ff1610611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906130cb565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611a7b8161228d565b611ab1576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b2f83611374565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b81600a6122f9565b611b8b600a61230f565b905090565b611baa82826040518060200160405280600081525061231d565b5050565b600080611bba83611374565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bfc5750611bfb81856117f1565b5b80611c3a57508373ffffffffffffffffffffffffffffffffffffffff16611c2284610996565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c6382611374565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d17576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2283838361236f565b611d2d600082611abc565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7d9190613288565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd49190613201565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e93838383612374565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f65576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120569190613004565b60405180910390a3505050565b61206e848484611c43565b61207a84848484612379565b6120b0576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415612115576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612275565b600082905060005b600082146121475780806121309061341a565b915050600a826121409190613257565b915061211d565b60008167ffffffffffffffff811115612189577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121bb5781602001600182028036833780820191505090505b5090505b6000851461226e576001826121d49190613288565b9150600a856121e39190613463565b60306121ef9190613201565b60f81b81838151811061222b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122679190613257565b94506121bf565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6123278383612507565b6123346000848484612379565b61236a576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b600061239a8473ffffffffffffffffffffffffffffffffffffffff1661227a565b156124fa578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c3611ab4565b8786866040518563ffffffff1660e01b81526004016123e59493929190612f8f565b602060405180830381600087803b1580156123ff57600080fd5b505af192505050801561243057506040513d601f19601f8201168201806040525081019061242d9190612c33565b60015b6124aa573d8060008114612460576040519150601f19603f3d011682016040523d82523d6000602084013e612465565b606091505b506000815114156124a2576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124ff565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561256e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125778161228d565b156125ad576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125b96000838361236f565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126099190613201565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126ca60008383612374565b5050565b8280546126da906133b7565b90600052602060002090601f0160209004810192826126fc5760008555612743565b82601f1061271557805160ff1916838001178555612743565b82800160010185558215612743579182015b82811115612742578251825591602001919060010190612727565b5b50905061275091906127da565b5090565b828054612760906133b7565b90600052602060002090601f01602090048101928261278257600085556127c9565b82601f1061279b57803560ff19168380011785556127c9565b828001600101855582156127c9579182015b828111156127c85782358255916020019190600101906127ad565b5b5090506127d691906127da565b5090565b5b808211156127f35760008160009055506001016127db565b5090565b600061280a6128058461314b565b613126565b90508281526020810184848401111561282257600080fd5b61282d848285613375565b509392505050565b60006128486128438461317c565b613126565b90508281526020810184848401111561286057600080fd5b61286b848285613375565b509392505050565b600081359050612882816135d9565b92915050565b600081359050612897816135f0565b92915050565b6000815190506128ac816135f0565b92915050565b6000813590506128c181613607565b92915050565b6000815190506128d681613607565b92915050565b600082601f8301126128ed57600080fd5b81356128fd8482602086016127f7565b91505092915050565b6000813590506129158161361e565b92915050565b60008083601f84011261292d57600080fd5b8235905067ffffffffffffffff81111561294657600080fd5b60208301915083600182028301111561295e57600080fd5b9250929050565b600082601f83011261297657600080fd5b8135612986848260208601612835565b91505092915050565b60008135905061299e81613635565b92915050565b6000815190506129b381613635565b92915050565b6000602082840312156129cb57600080fd5b60006129d984828501612873565b91505092915050565b600080604083850312156129f557600080fd5b6000612a0385828601612873565b9250506020612a1485828601612873565b9150509250929050565b600080600060608486031215612a3357600080fd5b6000612a4186828701612873565b9350506020612a5286828701612873565b9250506040612a638682870161298f565b9150509250925092565b60008060008060808587031215612a8357600080fd5b6000612a9187828801612873565b9450506020612aa287828801612873565b9350506040612ab38782880161298f565b925050606085013567ffffffffffffffff811115612ad057600080fd5b612adc878288016128dc565b91505092959194509250565b60008060408385031215612afb57600080fd5b6000612b0985828601612873565b9250506020612b1a85828601612888565b9150509250929050565b600080600060408486031215612b3957600080fd5b6000612b4786828701612873565b935050602084013567ffffffffffffffff811115612b6457600080fd5b612b708682870161291b565b92509250509250925092565b60008060408385031215612b8f57600080fd5b6000612b9d85828601612873565b9250506020612bae8582860161298f565b9150509250929050565b600060208284031215612bca57600080fd5b6000612bd884828501612888565b91505092915050565b600060208284031215612bf357600080fd5b6000612c018482850161289d565b91505092915050565b600060208284031215612c1c57600080fd5b6000612c2a848285016128b2565b91505092915050565b600060208284031215612c4557600080fd5b6000612c53848285016128c7565b91505092915050565b600060208284031215612c6e57600080fd5b6000612c7c84828501612906565b91505092915050565b600060208284031215612c9757600080fd5b600082013567ffffffffffffffff811115612cb157600080fd5b612cbd84828501612965565b91505092915050565b600080600060608486031215612cdb57600080fd5b600084013567ffffffffffffffff811115612cf557600080fd5b612d0186828701612965565b935050602084013567ffffffffffffffff811115612d1e57600080fd5b612d2a86828701612965565b9250506040612d3b86828701612873565b9150509250925092565b600060208284031215612d5757600080fd5b6000612d658482850161298f565b91505092915050565b600060208284031215612d8057600080fd5b6000612d8e848285016129a4565b91505092915050565b612da0816132bc565b82525050565b612daf816132bc565b82525050565b612dbe816132ce565b82525050565b6000612dcf826131ad565b612dd981856131c3565b9350612de9818560208601613384565b612df281613550565b840191505092915050565b612e0681613363565b82525050565b6000612e17826131b8565b612e2181856131d4565b9350612e31818560208601613384565b612e3a81613550565b840191505092915050565b6000612e50826131b8565b612e5a81856131e5565b9350612e6a818560208601613384565b612e7381613550565b840191505092915050565b6000612e89826131b8565b612e9381856131f6565b9350612ea3818560208601613384565b80840191505092915050565b6000612ebc602e836131e5565b9150612ec782613561565b604082019050919050565b6000612edf601f836131e5565b9150612eea826135b0565b602082019050919050565b6000604083016000830151612f0d6000860182612d97565b5060208301518482036020860152612f258282612e0c565b9150508091505092915050565b612f3b81613338565b82525050565b612f4a81613342565b82525050565b6000612f5c8285612e7e565b9150612f688284612e7e565b91508190509392505050565b6000602082019050612f896000830184612da6565b92915050565b6000608082019050612fa46000830187612da6565b612fb16020830186612da6565b612fbe6040830185612f32565b8181036060830152612fd08184612dc4565b905095945050505050565b6000604082019050612ff06000830185612da6565b612ffd6020830184612f32565b9392505050565b60006020820190506130196000830184612db5565b92915050565b600060a08201905081810360008301526130398188612dc4565b9050818103602083015261304d8187612ef5565b905081810360408301526130618186612dc4565b90506130706060830185612f41565b81810360808301526130828184612dc4565b90509695505050505050565b60006020820190506130a36000830184612dfd565b92915050565b600060208201905081810360008301526130c38184612e45565b905092915050565b600060208201905081810360008301526130e481612eaf565b9050919050565b6000602082019050818103600083015261310481612ed2565b9050919050565b60006020820190506131206000830184612f32565b92915050565b6000613130613141565b905061313c82826133e9565b919050565b6000604051905090565b600067ffffffffffffffff82111561316657613165613521565b5b61316f82613550565b9050602081019050919050565b600067ffffffffffffffff82111561319757613196613521565b5b6131a082613550565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061320c82613338565b915061321783613338565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561324c5761324b613494565b5b828201905092915050565b600061326282613338565b915061326d83613338565b92508261327d5761327c6134c3565b5b828204905092915050565b600061329382613338565b915061329e83613338565b9250828210156132b1576132b0613494565b5b828203905092915050565b60006132c782613318565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613311826132bc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061336e82613356565b9050919050565b82818337600083830152505050565b60005b838110156133a2578082015181840152602081019050613387565b838111156133b1576000848401525b50505050565b600060028204905060018216806133cf57607f821691505b602082108114156133e3576133e26134f2565b5b50919050565b6133f282613550565b810181811067ffffffffffffffff8211171561341157613410613521565b5b80604052505050565b600061342582613338565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561345857613457613494565b5b600182019050919050565b600061346e82613338565b915061347983613338565b925082613489576134886134c3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6135e2816132bc565b81146135ed57600080fd5b50565b6135f9816132ce565b811461360457600080fd5b50565b613610816132da565b811461361b57600080fd5b50565b61362781613306565b811461363257600080fd5b50565b61363e81613338565b811461364957600080fd5b5056fea264697066735822122023e2bc9c0c4e122f629aa2a96697da1c08eebbca2e701727f29c2a4917819aa064736f6c63430008040033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json index ec9ed71c..25c04c3d 100644 --- a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json +++ b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json @@ -183,8 +183,8 @@ "type": "function" } ], - "bytecode": "0x60c060405234801561001057600080fd5b50604051610d76380380610d76833981810160405281019061003291906100bc565b8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050610141565b6000815190506100b68161012a565b92915050565b600080604083850312156100cf57600080fd5b60006100dd858286016100a7565b92505060206100ee858286016100a7565b9150509250929050565b60006101038261010a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610133816100f8565b811461013e57600080fd5b50565b60805160601c60a05160601c610bfc61017a60003960008181610457015261065b01526000818161019701526103470152610bfc6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea26469706673582212200a6767f45c48ead348adb16fea971ac62e6e768ac232577cf77499a4332030c764736f6c63430008040033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea26469706673582212200a6767f45c48ead348adb16fea971ac62e6e768ac232577cf77499a4332030c764736f6c63430008040033", + "bytecode": "0x60c060405234801561001057600080fd5b50604051610d76380380610d76833981810160405281019061003291906100bc565b8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050610141565b6000815190506100b68161012a565b92915050565b600080604083850312156100cf57600080fd5b60006100dd858286016100a7565b92505060206100ee858286016100a7565b9150509250929050565b60006101038261010a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610133816100f8565b811461013e57600080fd5b50565b60805160601c60a05160601c610bfc61017a60003960008181610457015261065b01526000818161019701526103470152610bfc6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea2646970667358221220b15f140ef5ce67285c4130e8f0aafe0ea7f8da961e5575be390f41801c9eadb564736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea2646970667358221220b15f140ef5ce67285c4130e8f0aafe0ea7f8da961e5575be390f41801c9eadb564736f6c63430008040033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/packages/hyperverse-evm-erc721/contracts.json b/packages/hyperverse-evm-erc721/contracts.json index 50661495..432e3cf1 100644 --- a/packages/hyperverse-evm-erc721/contracts.json +++ b/packages/hyperverse-evm-erc721/contracts.json @@ -15,8 +15,8 @@ }, "ethereum": { "testnet": { - "contractAddress": "0xEcA806fE544DDd4c05f2Cda12f932F0eCB528525", - "factoryAddress": "0xb42a64d1968567F62c77E9c3c8C560e8Dd988374" + "contractAddress": "0xC0C76682E65A32e8b56f3a40a1b46dc9B4E3D51C", + "factoryAddress": "0x317C0916563Ecf0752b1DC886Ae92B685bfE6feE" }, "mainnet": {} }, diff --git a/packages/hyperverse-evm-erc721/contracts/ERC721.sol b/packages/hyperverse-evm-erc721/contracts/ERC721.sol index 71862d16..9445fd74 100644 --- a/packages/hyperverse-evm-erc721/contracts/ERC721.sol +++ b/packages/hyperverse-evm-erc721/contracts/ERC721.sol @@ -50,8 +50,8 @@ contract ERC721 is mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; - // Mapping for individual token URIs - mapping (uint256 => string) internal _tokenURIs; + // Mapping for individual token URIs + mapping(uint256 => string) internal _tokenURIs; /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ E V E N T S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ ///+events @@ -145,13 +145,14 @@ contract ERC721 is } //TENANT OWNER FUNCTIONS - function tenantMint(address _reciever) external isTenantOwner { - _safeMint(_reciever, nextTokenId()); + function tenantMint(address _reciever) external isTenantOwner returns (uint256) { + uint256 tokenId = nextTokenId(); + _safeMint(_reciever, tokenId); + return tokenId; } function tenantMint(address _to, string calldata _uri) external - payable isTenantOwner returns (uint256) { diff --git a/packages/hyperverse-evm-erc721/source/erc721Library.ts b/packages/hyperverse-evm-erc721/source/erc721Library.ts index aac52558..7eaf32ee 100644 --- a/packages/hyperverse-evm-erc721/source/erc721Library.ts +++ b/packages/hyperverse-evm-erc721/source/erc721Library.ts @@ -32,35 +32,50 @@ export async function ERC721LibraryInternal( providerOrSigner ); - const mint = async () => { + const mint = async (to: string) => { try { - const mintTxn = await base.proxyContract?.mint(); + const mintTxn = await base.proxyContract?.mint(to); return mintTxn.wait() as TransactionReceipt; } catch (error) { throw error; } }; + const togglePublicMint = async (isPublic: boolean) => { + try { + const toggleTxn = await base.proxyContract?.togglePublicMint(isPublic); + return toggleTxn.wait() as TransactionReceipt; + } catch (error) { + throw error; + } + }; - const tenantMint = async (to: string) => { + const tenantMint = async ({ to, image }: { to: string; image?: File }) => { try { - const mintTxn = await base.proxyContract?.tenantMint(to); + let mintTxn; + + if (image) { + const tokenUri = await hyperverse.storage?.uploadFile(image); + mintTxn = await base.proxyContract?.tenantMint(to, tokenUri); + } else { + mintTxn = await base.proxyContract?.tenantMint(to); + } + return mintTxn.wait() as TransactionReceipt; } catch (error) { throw error; } }; - const tenantMintUri = async (to: string, tokenUri: string) => { + const tenantMintUri = async ({ to, tokenURI }: { to: string; tokenURI: string }) => { try { - const mintTxn = await base.proxyContract?.tenantMint(to, tokenUri); + const mintTxn = await base.proxyContract?.tenantMint(to, tokenURI); return mintTxn.wait() as TransactionReceipt; } catch (error) { throw error; } }; - const getBaseURI = async () => { try { const baseURI = await base.proxyContract?.getBaseURI(); @@ -68,34 +83,34 @@ export async function ERC721LibraryInternal( } catch (error) { throw error; } - } + }; const setMintPrice = async (price: number) => { try { - const setMintPriceTxn = await base.proxyContract?.setMintPrice(price) + const setMintPriceTxn = await base.proxyContract?.setMintPrice(price); return setMintPriceTxn.wait() as TransactionReceipt; } catch (error) { throw error; } - } + }; const setBaseURI = async (baseURI: string) => { try { - const setBaseURITxn = await base.proxyContract?.setBaseURI(baseURI) + const setBaseURITxn = await base.proxyContract?.setBaseURI(baseURI); return setBaseURITxn.wait() as TransactionReceipt; } catch (error) { throw error; } - } + }; const setPublicSale = async (publicSale: boolean) => { try { - const setPublicSalesTxn = await base.proxyContract?.setPublicSales(publicSale) + const setPublicSalesTxn = await base.proxyContract?.setPublicSales(publicSale); return setPublicSalesTxn.wait() as TransactionReceipt; } catch (error) { throw error; } - } + }; const withdraw = async () => { try { @@ -104,7 +119,7 @@ export async function ERC721LibraryInternal( } catch (error) { throw error; } - } + }; const tokenURI = async (tokenId: number) => { try { @@ -113,8 +128,7 @@ export async function ERC721LibraryInternal( } catch (error) { throw error; } - } - + }; const getBalanceOf = async (account: string) => { try { @@ -134,9 +148,6 @@ export async function ERC721LibraryInternal( } }; - - - const transfer = async ({ from, to, @@ -147,15 +158,13 @@ export async function ERC721LibraryInternal( tokenId: number; }) => { try { - const transferTxn = await base.proxyContract?.tcdransferFrom(from, to, tokenId); + const transferTxn = await base.proxyContract?.transferFrom(from, to, tokenId); return transferTxn.wait() as TransactionReceipt; } catch (error) { throw error; } }; - - const approve = async ({ to, tokenId }: { to: string; tokenId: number }) => { try { const approveTxn = await base.proxyContract?.approve(to, tokenId); @@ -165,7 +174,13 @@ export async function ERC721LibraryInternal( } }; - const setApprovalForAll = async ({ operator, approved }: { operator: string; approved: boolean }) => { + const setApprovalForAll = async ({ + operator, + approved, + }: { + operator: string; + approved: boolean; + }) => { try { const setApprovalTxn = await base.proxyContract?.setApprovalForAll(operator, approved); return setApprovalTxn.wait() as TransactionReceipt; @@ -177,6 +192,7 @@ export async function ERC721LibraryInternal( return { ...base, mint, + togglePublicMint, tenantMint, tenantMintUri, getBaseURI, From e4b1e760fef071a7aa96da3e4a98644d88b88f4f Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Mon, 13 Jun 2022 19:14:16 -0400 Subject: [PATCH 05/20] app updates --- apps/ethereum/erc721/components/Container.tsx | 4 + .../components/WriteFunctions/SetBaseUri.tsx | 77 +++++++++++++++++ .../components/WriteFunctions/TenantMint.tsx | 82 +++++++++++++++++++ .../WriteFunctions/TogglePublicMint.tsx | 60 ++++++++++---- apps/ethereum/erc721/pages/_app.tsx | 23 ------ 5 files changed, 205 insertions(+), 41 deletions(-) create mode 100644 apps/ethereum/erc721/components/WriteFunctions/SetBaseUri.tsx create mode 100644 apps/ethereum/erc721/components/WriteFunctions/TenantMint.tsx diff --git a/apps/ethereum/erc721/components/Container.tsx b/apps/ethereum/erc721/components/Container.tsx index 892acf5b..33c21129 100644 --- a/apps/ethereum/erc721/components/Container.tsx +++ b/apps/ethereum/erc721/components/Container.tsx @@ -3,8 +3,10 @@ import CreateInstance from './WriteFunctions/CreateInstance'; import Transfer from './WriteFunctions/Transfer'; import BalanceOf from './ReadFunctions/BalanceOf'; import Approve from './WriteFunctions/Approve'; +import BaseURI from './WriteFunctions/SetBaseUri'; import ApproveForAll from './WriteFunctions/ApproveForAll'; import TogglePublicMint from './WriteFunctions/TogglePublicMint'; +import TenantMint from './WriteFunctions/TenantMint'; import Mint from './WriteFunctions/Mint'; import GetOwnerOf from './ReadFunctions/GetOwnerOf'; @@ -51,6 +53,8 @@ const Container = () => {
+ +

Token Functions

diff --git a/apps/ethereum/erc721/components/WriteFunctions/SetBaseUri.tsx b/apps/ethereum/erc721/components/WriteFunctions/SetBaseUri.tsx new file mode 100644 index 00000000..ddac0784 --- /dev/null +++ b/apps/ethereum/erc721/components/WriteFunctions/SetBaseUri.tsx @@ -0,0 +1,77 @@ +import { useEffect, useState } from 'react'; +import * as Accordion from '@radix-ui/react-accordion'; +import { useEthereum } from '@decentology/hyperverse-ethereum'; +import { useERC721 } from '@decentology/hyperverse-evm-erc721'; +import { toast } from 'react-toastify'; +import { + Box, + Item, + TriggerContainer, + Trigger, + Parameters, + Input, + Content, + Button, +} from '../ComponentStyles'; +import { useMutation } from 'react-query'; + +const BaseURI = () => { + const { account } = useEthereum(); + const erc721 = useERC721(); + const { mutate, error, isLoading } = useMutation('transfer', erc721.setBaseURI); + + const [baseURI, setBaseURI] = useState(''); + + const setURI = async () => { + try { + mutate(baseURI); + } catch (error) { + console.log('e', error); + throw error; + } + }; + + useEffect(() => { + if (error) { + console.log(error); + if (error instanceof Error) { + toast.error(error.message, { + position: toast.POSITION.BOTTOM_CENTER, + }); + } + } + }, [error]); + + return ( + +

Base URI

+

Set the base URI for your ERC721

+ + + + + {!account ? 'Connect Wallet' : 'Set Base URI'} + + + + + setBaseURI(e.target.value)} + /> + + + + + +
+ ); +}; + +export default BaseURI; diff --git a/apps/ethereum/erc721/components/WriteFunctions/TenantMint.tsx b/apps/ethereum/erc721/components/WriteFunctions/TenantMint.tsx new file mode 100644 index 00000000..bf4f9504 --- /dev/null +++ b/apps/ethereum/erc721/components/WriteFunctions/TenantMint.tsx @@ -0,0 +1,82 @@ +import { useState } from 'react'; +import * as Accordion from '@radix-ui/react-accordion'; +import { useEthereum } from '@decentology/hyperverse-ethereum'; +import { useERC721 } from '@decentology/hyperverse-evm-erc721'; +import { + Box, + Item, + TriggerContainer, + Trigger, + Parameters, + Input, + Content, + Button, +} from '../ComponentStyles'; +import { useMutation } from 'react-query'; + +const TenantMint = () => { + const { account } = useEthereum(); + + const erc721 = useERC721(); + const { mutate, isLoading } = useMutation('tenantMint', erc721.tenantMint); + const [imageFile, setImageFile] = useState(); + + const [receiver, setReceiver] = useState(''); + + const mint = async () => { + try { + const instanceData: { + to: string; + image: File | undefined; + } = { + to: receiver, + image: imageFile, + }; + + mutate(instanceData); + } catch (error) { + throw error; + } + }; + + return ( + +

Mint

+

Mint an NFT (tenant only)

+ + + + + {!account ? 'Connect Wallet' : 'Mint'} + + + + + setReceiver(e.target.value)} + /> + setImageFile(e!.target!.files![0])} + /> + + + + + +
+ ); +}; + +export default TenantMint; diff --git a/apps/ethereum/erc721/components/WriteFunctions/TogglePublicMint.tsx b/apps/ethereum/erc721/components/WriteFunctions/TogglePublicMint.tsx index 828462d5..3cbe35fb 100644 --- a/apps/ethereum/erc721/components/WriteFunctions/TogglePublicMint.tsx +++ b/apps/ethereum/erc721/components/WriteFunctions/TogglePublicMint.tsx @@ -6,6 +6,11 @@ import { Box, Item, Button, + TriggerContainer, + Trigger, + Parameters, + Content, + Input, } from '../ComponentStyles'; import { useMutation } from 'react-query'; @@ -13,29 +18,48 @@ const TogglePublicMint = () => { const { account } = useEthereum(); const erc721 = useERC721(); - const { mutate, isLoading } = useMutation('togglePublicMint', erc721.togglePublicMint); - + const [boolMint, setBoolMint] = useState('false'); + const { mutate, isLoading } = useMutation('togglePublicMint', erc721.togglePublicMint); + const publicMint = async () => { + try { + mutate(boolMint === 'true' ? true : false); + } catch (error) { + console.log('e', error); + throw error; + } + }; return ( -

Toggle Public Mint

-

Set minting permission

- - - - - - - -
+

Toggle Public Mint

+

Toggle Public Mint to activate or deactivate

+ + + + + {!account ? 'Connect Wallet' : 'Toggle Public Mint'} + + + + + + + + + + + ); }; diff --git a/apps/ethereum/erc721/pages/_app.tsx b/apps/ethereum/erc721/pages/_app.tsx index e7c3e40b..34a7a4b6 100644 --- a/apps/ethereum/erc721/pages/_app.tsx +++ b/apps/ethereum/erc721/pages/_app.tsx @@ -10,29 +10,6 @@ import type { AppProps } from 'next/app'; import { useLocalStorage } from 'react-use'; import { createContext } from 'react'; -// const globalStyles = globalCss({ -// '*': { -// margin: 0, -// padding: 0, -// }, -// html: { -// fontSize: 14, -// fontFamily: 'Proxima Nova, sans-serif', -// letterSpacing: '0.9px', -// }, -// body: { -// fontSize: '1rem', - -// backgroundColor: '$blue500', -// color: '$gray100', -// maxWidth: '1200px', - -// display: 'flex', -// justifyContent: 'center', -// alignItems: 'center', -// height: '100vh', -// }, -// }); const globalStyles = globalCss({ '*': { From 4e77ad8d6575cb566279d24ee66dd2afc7d987d7 Mon Sep 17 00:00:00 2001 From: Jonathan Sheely Date: Tue, 14 Jun 2022 06:07:25 -0400 Subject: [PATCH 06/20] Handle function overloading --- packages/hyperverse-evm-erc721/source/erc721Library.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/hyperverse-evm-erc721/source/erc721Library.ts b/packages/hyperverse-evm-erc721/source/erc721Library.ts index 7eaf32ee..f3c3694b 100644 --- a/packages/hyperverse-evm-erc721/source/erc721Library.ts +++ b/packages/hyperverse-evm-erc721/source/erc721Library.ts @@ -56,9 +56,10 @@ export async function ERC721LibraryInternal( if (image) { const tokenUri = await hyperverse.storage?.uploadFile(image); - mintTxn = await base.proxyContract?.tenantMint(to, tokenUri); + mintTxn = await base.proxyContract?.['tenantMint(address string)'](to, tokenUri); + } else { - mintTxn = await base.proxyContract?.tenantMint(to); + mintTxn = await base.proxyContract?.['tenantMint(address)'](to); } return mintTxn.wait() as TransactionReceipt; From 4c418dd70f862a6f807e5e0aaf5a3afc2d4a1e00 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Tue, 14 Jun 2022 18:30:40 -0400 Subject: [PATCH 07/20] tokeUri fix --- .../components/WriteFunctions/TenantMint.tsx | 6 ++-- .../contracts/ERC721.sol/ERC721.json | 4 +-- .../ERC721Factory.sol/ERC721Factory.json | 4 +-- packages/hyperverse-evm-erc721/contracts.json | 4 +-- .../source/erc721Library.ts | 28 +++++++++++-------- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/apps/ethereum/erc721/components/WriteFunctions/TenantMint.tsx b/apps/ethereum/erc721/components/WriteFunctions/TenantMint.tsx index bf4f9504..d1fd071d 100644 --- a/apps/ethereum/erc721/components/WriteFunctions/TenantMint.tsx +++ b/apps/ethereum/erc721/components/WriteFunctions/TenantMint.tsx @@ -26,13 +26,13 @@ const TenantMint = () => { const mint = async () => { try { const instanceData: { - to: string; image: File | undefined; + to: string; } = { - to: receiver, image: imageFile, + to: receiver, }; - +console.log(instanceData) mutate(instanceData); } catch (error) { throw error; diff --git a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json index d29c843f..5960ed76 100644 --- a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json +++ b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json @@ -659,8 +659,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b5060405162003b8c38038062003b8c83398181016040528101906200003791906200040c565b60016000819055506040518060a001604052806040518060400160405280600681526020017f4552433732310000000000000000000000000000000000000000000000000000815250815260200160405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c6c696e6b2e6e6574000000000000000081525081525081526020016040518060400160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250815260200165032a361e860667ffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c4c696e6b2e6e657400000000000000008152508152506002600082015181600001908051906020019062000194929190620002b4565b5060208201518160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906200020392919062000345565b505050604082015181600301908051906020019062000224929190620002b4565b5060608201518160040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550608082015181600501908051906020019062000272929190620002b4565b509050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050620004eb565b828054620002c2906200046c565b90600052602060002090601f016020900481019282620002e6576000855562000332565b82601f106200030157805160ff191683800117855562000332565b8280016001018555821562000332579182015b828111156200033157825182559160200191906001019062000314565b5b509050620003419190620003d6565b5090565b82805462000353906200046c565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b6000815190506200040681620004d1565b92915050565b6000602082840312156200041f57600080fd5b60006200042f84828501620003f5565b91505092915050565b600062000445826200044c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048557607f821691505b602082108114156200049c576200049b620004a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620004dc8162000438565b8114620004e857600080fd5b50565b60805160601c6136826200050a60003960006117cf01526136826000f3fe60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105cd578063ce606ee01461060a578063e985e9c514610635578063f4a0a528146106725761019c565b8063a035b1fe14610550578063a22cb4651461057b578063b88d4fde146105a45761019c565b80636a627842116100c65780636a6278421461048d57806370a08231146104bd578063714c5398146104fa57806395d89b41146105255761019c565b806355f804b3146103fe5780635aca1bb6146104275780636352211e146104505761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103665780633ccfd60b1461039557806342842e0e146103ac57806349df728c146103d55761019c565b8063217cc2b4146102c357806323b872dd1461030057806327fbceac146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612c0a565b61069b565b6040516101d59190613004565b60405180910390f35b3480156101ea57600080fd5b506101f361077d565b60405161020091906130a9565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612cc6565b61080f565b005b34801561023e57600080fd5b5061025960048036038101906102549190612d45565b610996565b6040516102669190612f74565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612b7c565b6109dc565b005b3480156102a457600080fd5b506102ad610ae5565b6040516102ba9190613004565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906129b9565b610af8565b6040516102f7919061310b565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612a1e565b610ba0565b005b34801561033557600080fd5b50610350600480360381019061034b9190612b24565b610bf7565b60405161035d919061310b565b60405180910390f35b34801561037257600080fd5b5061037b610cd1565b60405161038c95949392919061301f565b60405180910390f35b3480156103a157600080fd5b506103aa610f93565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612a1e565b611069565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612c5c565b611089565b005b34801561040a57600080fd5b5061042560048036038101906104209190612c85565b61122f565b005b34801561043357600080fd5b5061044e60048036038101906104499190612bb8565b6112d0565b005b34801561045c57600080fd5b5061047760048036038101906104729190612d45565b611374565b6040516104849190612f74565b60405180910390f35b6104a760048036038101906104a291906129b9565b61141d565b6040516104b4919061310b565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906129b9565b61151d565b6040516104f1919061310b565b60405180910390f35b34801561050657600080fd5b5061050f6115cc565b60405161051c91906130a9565b60405180910390f35b34801561053157600080fd5b5061053a61165e565b60405161054791906130a9565b60405180910390f35b34801561055c57600080fd5b506105656116f0565b604051610572919061310b565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612ae8565b6116f6565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190612a6d565b61170c565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190612d45565b611765565b60405161060191906130a9565b60405180910390f35b34801561061657600080fd5b5061061f6117cd565b60405161062c9190612f74565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906129e2565b6117f1565b6040516106699190613004565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612d45565b611885565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610776575061077582611916565b5b9050919050565b6060600b805461078c906133b7565b80601f01602080910402602001604051908101604052809291908181526020018280546107b8906133b7565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b600061081b6001611980565b9050801561083e5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108c7576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108dd9291906126ce565b5083600c90805190602001906108f49291906126ce565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156109905760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610987919061308e565b60405180910390a15b50505050565b60006109a182611a72565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e782611374565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a4f576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6e611ab4565b73ffffffffffffffffffffffffffffffffffffffff16141580610a9f5750610a9d81610a98611ab4565b6117f1565b155b15610ad6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae08383611abc565b505050565b600f60009054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b8b611b75565b9050610b978382611b90565b80915050919050565b610bb1610bab611ab4565b82611bae565b610be7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf2838383611c43565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c80576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c8a611b75565b9050610c968582611b90565b6000848490501115610cc6578383601460008481526020019081526020016000209190610cc4929190612754565b505b809150509392505050565b6002806000018054610ce2906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e906133b7565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610dd6906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e02906133b7565b8015610e4f5780601f10610e2457610100808354040283529160200191610e4f565b820191906000526020600020905b815481529060010190602001808311610e3257829003601f168201915b50505050508152505090806003018054610e68906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e94906133b7565b8015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610f10906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3c906133b7565b8015610f895780601f10610f5e57610100808354040283529160200191610f89565b820191906000526020600020905b815481529060010190602001808311610f6c57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611065573d6000803e3d6000fd5b5050565b6110848383836040518060200160405280600081525061170c565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611110576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161114b9190612f74565b60206040518083038186803b15801561116357600080fd5b505afa158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b9190612d6e565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016111d8929190612fdb565b602060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a9190612be1565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90805190602001906112cc9291906126ce565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611357576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611414576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c906130eb565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff16151514156114bb576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146114f6576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611500611b75565b905061150c8382611b90565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611585576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546115db906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611607906133b7565b80156116545780601f1061162957610100808354040283529160200191611654565b820191906000526020600020905b81548152906001019060200180831161163757829003601f168201915b5050505050905090565b6060600c805461166d906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611699906133b7565b80156116e65780601f106116bb576101008083540402835291602001916116e6565b820191906000526020600020905b8154815290600101906020018083116116c957829003601f168201915b5050505050905090565b600e5481565b611708611701611ab4565b8383611e98565b5050565b61171d611717611ab4565b83611bae565b611753576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175f84848484612063565b50505050565b606061177082611a72565b600061177a6120b6565b9050600081511161179a57604051806020016040528060008152506117c5565b806117a4846120cd565b6040516020016117b5929190612f50565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461190c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156119f65760018260ff161480156119ae57506119ac3061227a565b155b6119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e4906130cb565b60405180910390fd5b60009050611a6d565b8160ff16600160009054906101000a900460ff1660ff1610611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906130cb565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611a7b8161228d565b611ab1576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b2f83611374565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b81600a6122f9565b611b8b600a61230f565b905090565b611baa82826040518060200160405280600081525061231d565b5050565b600080611bba83611374565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bfc5750611bfb81856117f1565b5b80611c3a57508373ffffffffffffffffffffffffffffffffffffffff16611c2284610996565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c6382611374565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d17576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2283838361236f565b611d2d600082611abc565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7d9190613288565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd49190613201565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e93838383612374565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f65576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120569190613004565b60405180910390a3505050565b61206e848484611c43565b61207a84848484612379565b6120b0576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415612115576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612275565b600082905060005b600082146121475780806121309061341a565b915050600a826121409190613257565b915061211d565b60008167ffffffffffffffff811115612189577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121bb5781602001600182028036833780820191505090505b5090505b6000851461226e576001826121d49190613288565b9150600a856121e39190613463565b60306121ef9190613201565b60f81b81838151811061222b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122679190613257565b94506121bf565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6123278383612507565b6123346000848484612379565b61236a576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b600061239a8473ffffffffffffffffffffffffffffffffffffffff1661227a565b156124fa578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c3611ab4565b8786866040518563ffffffff1660e01b81526004016123e59493929190612f8f565b602060405180830381600087803b1580156123ff57600080fd5b505af192505050801561243057506040513d601f19601f8201168201806040525081019061242d9190612c33565b60015b6124aa573d8060008114612460576040519150601f19603f3d011682016040523d82523d6000602084013e612465565b606091505b506000815114156124a2576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124ff565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561256e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125778161228d565b156125ad576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125b96000838361236f565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126099190613201565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126ca60008383612374565b5050565b8280546126da906133b7565b90600052602060002090601f0160209004810192826126fc5760008555612743565b82601f1061271557805160ff1916838001178555612743565b82800160010185558215612743579182015b82811115612742578251825591602001919060010190612727565b5b50905061275091906127da565b5090565b828054612760906133b7565b90600052602060002090601f01602090048101928261278257600085556127c9565b82601f1061279b57803560ff19168380011785556127c9565b828001600101855582156127c9579182015b828111156127c85782358255916020019190600101906127ad565b5b5090506127d691906127da565b5090565b5b808211156127f35760008160009055506001016127db565b5090565b600061280a6128058461314b565b613126565b90508281526020810184848401111561282257600080fd5b61282d848285613375565b509392505050565b60006128486128438461317c565b613126565b90508281526020810184848401111561286057600080fd5b61286b848285613375565b509392505050565b600081359050612882816135d9565b92915050565b600081359050612897816135f0565b92915050565b6000815190506128ac816135f0565b92915050565b6000813590506128c181613607565b92915050565b6000815190506128d681613607565b92915050565b600082601f8301126128ed57600080fd5b81356128fd8482602086016127f7565b91505092915050565b6000813590506129158161361e565b92915050565b60008083601f84011261292d57600080fd5b8235905067ffffffffffffffff81111561294657600080fd5b60208301915083600182028301111561295e57600080fd5b9250929050565b600082601f83011261297657600080fd5b8135612986848260208601612835565b91505092915050565b60008135905061299e81613635565b92915050565b6000815190506129b381613635565b92915050565b6000602082840312156129cb57600080fd5b60006129d984828501612873565b91505092915050565b600080604083850312156129f557600080fd5b6000612a0385828601612873565b9250506020612a1485828601612873565b9150509250929050565b600080600060608486031215612a3357600080fd5b6000612a4186828701612873565b9350506020612a5286828701612873565b9250506040612a638682870161298f565b9150509250925092565b60008060008060808587031215612a8357600080fd5b6000612a9187828801612873565b9450506020612aa287828801612873565b9350506040612ab38782880161298f565b925050606085013567ffffffffffffffff811115612ad057600080fd5b612adc878288016128dc565b91505092959194509250565b60008060408385031215612afb57600080fd5b6000612b0985828601612873565b9250506020612b1a85828601612888565b9150509250929050565b600080600060408486031215612b3957600080fd5b6000612b4786828701612873565b935050602084013567ffffffffffffffff811115612b6457600080fd5b612b708682870161291b565b92509250509250925092565b60008060408385031215612b8f57600080fd5b6000612b9d85828601612873565b9250506020612bae8582860161298f565b9150509250929050565b600060208284031215612bca57600080fd5b6000612bd884828501612888565b91505092915050565b600060208284031215612bf357600080fd5b6000612c018482850161289d565b91505092915050565b600060208284031215612c1c57600080fd5b6000612c2a848285016128b2565b91505092915050565b600060208284031215612c4557600080fd5b6000612c53848285016128c7565b91505092915050565b600060208284031215612c6e57600080fd5b6000612c7c84828501612906565b91505092915050565b600060208284031215612c9757600080fd5b600082013567ffffffffffffffff811115612cb157600080fd5b612cbd84828501612965565b91505092915050565b600080600060608486031215612cdb57600080fd5b600084013567ffffffffffffffff811115612cf557600080fd5b612d0186828701612965565b935050602084013567ffffffffffffffff811115612d1e57600080fd5b612d2a86828701612965565b9250506040612d3b86828701612873565b9150509250925092565b600060208284031215612d5757600080fd5b6000612d658482850161298f565b91505092915050565b600060208284031215612d8057600080fd5b6000612d8e848285016129a4565b91505092915050565b612da0816132bc565b82525050565b612daf816132bc565b82525050565b612dbe816132ce565b82525050565b6000612dcf826131ad565b612dd981856131c3565b9350612de9818560208601613384565b612df281613550565b840191505092915050565b612e0681613363565b82525050565b6000612e17826131b8565b612e2181856131d4565b9350612e31818560208601613384565b612e3a81613550565b840191505092915050565b6000612e50826131b8565b612e5a81856131e5565b9350612e6a818560208601613384565b612e7381613550565b840191505092915050565b6000612e89826131b8565b612e9381856131f6565b9350612ea3818560208601613384565b80840191505092915050565b6000612ebc602e836131e5565b9150612ec782613561565b604082019050919050565b6000612edf601f836131e5565b9150612eea826135b0565b602082019050919050565b6000604083016000830151612f0d6000860182612d97565b5060208301518482036020860152612f258282612e0c565b9150508091505092915050565b612f3b81613338565b82525050565b612f4a81613342565b82525050565b6000612f5c8285612e7e565b9150612f688284612e7e565b91508190509392505050565b6000602082019050612f896000830184612da6565b92915050565b6000608082019050612fa46000830187612da6565b612fb16020830186612da6565b612fbe6040830185612f32565b8181036060830152612fd08184612dc4565b905095945050505050565b6000604082019050612ff06000830185612da6565b612ffd6020830184612f32565b9392505050565b60006020820190506130196000830184612db5565b92915050565b600060a08201905081810360008301526130398188612dc4565b9050818103602083015261304d8187612ef5565b905081810360408301526130618186612dc4565b90506130706060830185612f41565b81810360808301526130828184612dc4565b90509695505050505050565b60006020820190506130a36000830184612dfd565b92915050565b600060208201905081810360008301526130c38184612e45565b905092915050565b600060208201905081810360008301526130e481612eaf565b9050919050565b6000602082019050818103600083015261310481612ed2565b9050919050565b60006020820190506131206000830184612f32565b92915050565b6000613130613141565b905061313c82826133e9565b919050565b6000604051905090565b600067ffffffffffffffff82111561316657613165613521565b5b61316f82613550565b9050602081019050919050565b600067ffffffffffffffff82111561319757613196613521565b5b6131a082613550565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061320c82613338565b915061321783613338565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561324c5761324b613494565b5b828201905092915050565b600061326282613338565b915061326d83613338565b92508261327d5761327c6134c3565b5b828204905092915050565b600061329382613338565b915061329e83613338565b9250828210156132b1576132b0613494565b5b828203905092915050565b60006132c782613318565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613311826132bc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061336e82613356565b9050919050565b82818337600083830152505050565b60005b838110156133a2578082015181840152602081019050613387565b838111156133b1576000848401525b50505050565b600060028204905060018216806133cf57607f821691505b602082108114156133e3576133e26134f2565b5b50919050565b6133f282613550565b810181811067ffffffffffffffff8211171561341157613410613521565b5b80604052505050565b600061342582613338565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561345857613457613494565b5b600182019050919050565b600061346e82613338565b915061347983613338565b925082613489576134886134c3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6135e2816132bc565b81146135ed57600080fd5b50565b6135f9816132ce565b811461360457600080fd5b50565b613610816132da565b811461361b57600080fd5b50565b61362781613306565b811461363257600080fd5b50565b61363e81613338565b811461364957600080fd5b5056fea264697066735822122023e2bc9c0c4e122f629aa2a96697da1c08eebbca2e701727f29c2a4917819aa064736f6c63430008040033", - "deployedBytecode": "0x60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105cd578063ce606ee01461060a578063e985e9c514610635578063f4a0a528146106725761019c565b8063a035b1fe14610550578063a22cb4651461057b578063b88d4fde146105a45761019c565b80636a627842116100c65780636a6278421461048d57806370a08231146104bd578063714c5398146104fa57806395d89b41146105255761019c565b806355f804b3146103fe5780635aca1bb6146104275780636352211e146104505761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103665780633ccfd60b1461039557806342842e0e146103ac57806349df728c146103d55761019c565b8063217cc2b4146102c357806323b872dd1461030057806327fbceac146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612c0a565b61069b565b6040516101d59190613004565b60405180910390f35b3480156101ea57600080fd5b506101f361077d565b60405161020091906130a9565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190612cc6565b61080f565b005b34801561023e57600080fd5b5061025960048036038101906102549190612d45565b610996565b6040516102669190612f74565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612b7c565b6109dc565b005b3480156102a457600080fd5b506102ad610ae5565b6040516102ba9190613004565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906129b9565b610af8565b6040516102f7919061310b565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612a1e565b610ba0565b005b34801561033557600080fd5b50610350600480360381019061034b9190612b24565b610bf7565b60405161035d919061310b565b60405180910390f35b34801561037257600080fd5b5061037b610cd1565b60405161038c95949392919061301f565b60405180910390f35b3480156103a157600080fd5b506103aa610f93565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612a1e565b611069565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612c5c565b611089565b005b34801561040a57600080fd5b5061042560048036038101906104209190612c85565b61122f565b005b34801561043357600080fd5b5061044e60048036038101906104499190612bb8565b6112d0565b005b34801561045c57600080fd5b5061047760048036038101906104729190612d45565b611374565b6040516104849190612f74565b60405180910390f35b6104a760048036038101906104a291906129b9565b61141d565b6040516104b4919061310b565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906129b9565b61151d565b6040516104f1919061310b565b60405180910390f35b34801561050657600080fd5b5061050f6115cc565b60405161051c91906130a9565b60405180910390f35b34801561053157600080fd5b5061053a61165e565b60405161054791906130a9565b60405180910390f35b34801561055c57600080fd5b506105656116f0565b604051610572919061310b565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612ae8565b6116f6565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190612a6d565b61170c565b005b3480156105d957600080fd5b506105f460048036038101906105ef9190612d45565b611765565b60405161060191906130a9565b60405180910390f35b34801561061657600080fd5b5061061f6117cd565b60405161062c9190612f74565b60405180910390f35b34801561064157600080fd5b5061065c600480360381019061065791906129e2565b6117f1565b6040516106699190613004565b60405180910390f35b34801561067e57600080fd5b5061069960048036038101906106949190612d45565b611885565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610776575061077582611916565b5b9050919050565b6060600b805461078c906133b7565b80601f01602080910402602001604051908101604052809291908181526020018280546107b8906133b7565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b600061081b6001611980565b9050801561083e5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108c7576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108dd9291906126ce565b5083600c90805190602001906108f49291906126ce565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156109905760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610987919061308e565b60405180910390a15b50505050565b60006109a182611a72565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e782611374565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a4f576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6e611ab4565b73ffffffffffffffffffffffffffffffffffffffff16141580610a9f5750610a9d81610a98611ab4565b6117f1565b155b15610ad6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae08383611abc565b505050565b600f60009054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b8b611b75565b9050610b978382611b90565b80915050919050565b610bb1610bab611ab4565b82611bae565b610be7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf2838383611c43565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c80576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c8a611b75565b9050610c968582611b90565b6000848490501115610cc6578383601460008481526020019081526020016000209190610cc4929190612754565b505b809150509392505050565b6002806000018054610ce2906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0e906133b7565b8015610d5b5780601f10610d3057610100808354040283529160200191610d5b565b820191906000526020600020905b815481529060010190602001808311610d3e57829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610dd6906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e02906133b7565b8015610e4f5780601f10610e2457610100808354040283529160200191610e4f565b820191906000526020600020905b815481529060010190602001808311610e3257829003601f168201915b50505050508152505090806003018054610e68906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e94906133b7565b8015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610f10906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3c906133b7565b8015610f895780601f10610f5e57610100808354040283529160200191610f89565b820191906000526020600020905b815481529060010190602001808311610f6c57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461101a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611065573d6000803e3d6000fd5b5050565b6110848383836040518060200160405280600081525061170c565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611110576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161114b9190612f74565b60206040518083038186803b15801561116357600080fd5b505afa158015611177573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119b9190612d6e565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016111d8929190612fdb565b602060405180830381600087803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122a9190612be1565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112b6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90805190602001906112cc9291906126ce565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611357576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611414576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611465576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145c906130eb565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff16151514156114bb576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146114f6576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611500611b75565b905061150c8382611b90565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611585576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546115db906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611607906133b7565b80156116545780601f1061162957610100808354040283529160200191611654565b820191906000526020600020905b81548152906001019060200180831161163757829003601f168201915b5050505050905090565b6060600c805461166d906133b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611699906133b7565b80156116e65780601f106116bb576101008083540402835291602001916116e6565b820191906000526020600020905b8154815290600101906020018083116116c957829003601f168201915b5050505050905090565b600e5481565b611708611701611ab4565b8383611e98565b5050565b61171d611717611ab4565b83611bae565b611753576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175f84848484612063565b50505050565b606061177082611a72565b600061177a6120b6565b9050600081511161179a57604051806020016040528060008152506117c5565b806117a4846120cd565b6040516020016117b5929190612f50565b6040516020818303038152906040525b915050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461190c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156119f65760018260ff161480156119ae57506119ac3061227a565b155b6119ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e4906130cb565b60405180910390fd5b60009050611a6d565b8160ff16600160009054906101000a900460ff1660ff1610611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a44906130cb565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611a7b8161228d565b611ab1576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b2f83611374565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611b81600a6122f9565b611b8b600a61230f565b905090565b611baa82826040518060200160405280600081525061231d565b5050565b600080611bba83611374565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bfc5750611bfb81856117f1565b5b80611c3a57508373ffffffffffffffffffffffffffffffffffffffff16611c2284610996565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c6382611374565b73ffffffffffffffffffffffffffffffffffffffff1614611cb0576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d17576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d2283838361236f565b611d2d600082611abc565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7d9190613288565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611dd49190613201565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e93838383612374565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611eff576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f65576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516120569190613004565b60405180910390a3505050565b61206e848484611c43565b61207a84848484612379565b6120b0576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415612115576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612275565b600082905060005b600082146121475780806121309061341a565b915050600a826121409190613257565b915061211d565b60008167ffffffffffffffff811115612189577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121bb5781602001600182028036833780820191505090505b5090505b6000851461226e576001826121d49190613288565b9150600a856121e39190613463565b60306121ef9190613201565b60f81b81838151811061222b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856122679190613257565b94506121bf565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b6123278383612507565b6123346000848484612379565b61236a576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b600061239a8473ffffffffffffffffffffffffffffffffffffffff1661227a565b156124fa578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123c3611ab4565b8786866040518563ffffffff1660e01b81526004016123e59493929190612f8f565b602060405180830381600087803b1580156123ff57600080fd5b505af192505050801561243057506040513d601f19601f8201168201806040525081019061242d9190612c33565b60015b6124aa573d8060008114612460576040519150601f19603f3d011682016040523d82523d6000602084013e612465565b606091505b506000815114156124a2576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124ff565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561256e576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125778161228d565b156125ad576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125b96000838361236f565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126099190613201565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126ca60008383612374565b5050565b8280546126da906133b7565b90600052602060002090601f0160209004810192826126fc5760008555612743565b82601f1061271557805160ff1916838001178555612743565b82800160010185558215612743579182015b82811115612742578251825591602001919060010190612727565b5b50905061275091906127da565b5090565b828054612760906133b7565b90600052602060002090601f01602090048101928261278257600085556127c9565b82601f1061279b57803560ff19168380011785556127c9565b828001600101855582156127c9579182015b828111156127c85782358255916020019190600101906127ad565b5b5090506127d691906127da565b5090565b5b808211156127f35760008160009055506001016127db565b5090565b600061280a6128058461314b565b613126565b90508281526020810184848401111561282257600080fd5b61282d848285613375565b509392505050565b60006128486128438461317c565b613126565b90508281526020810184848401111561286057600080fd5b61286b848285613375565b509392505050565b600081359050612882816135d9565b92915050565b600081359050612897816135f0565b92915050565b6000815190506128ac816135f0565b92915050565b6000813590506128c181613607565b92915050565b6000815190506128d681613607565b92915050565b600082601f8301126128ed57600080fd5b81356128fd8482602086016127f7565b91505092915050565b6000813590506129158161361e565b92915050565b60008083601f84011261292d57600080fd5b8235905067ffffffffffffffff81111561294657600080fd5b60208301915083600182028301111561295e57600080fd5b9250929050565b600082601f83011261297657600080fd5b8135612986848260208601612835565b91505092915050565b60008135905061299e81613635565b92915050565b6000815190506129b381613635565b92915050565b6000602082840312156129cb57600080fd5b60006129d984828501612873565b91505092915050565b600080604083850312156129f557600080fd5b6000612a0385828601612873565b9250506020612a1485828601612873565b9150509250929050565b600080600060608486031215612a3357600080fd5b6000612a4186828701612873565b9350506020612a5286828701612873565b9250506040612a638682870161298f565b9150509250925092565b60008060008060808587031215612a8357600080fd5b6000612a9187828801612873565b9450506020612aa287828801612873565b9350506040612ab38782880161298f565b925050606085013567ffffffffffffffff811115612ad057600080fd5b612adc878288016128dc565b91505092959194509250565b60008060408385031215612afb57600080fd5b6000612b0985828601612873565b9250506020612b1a85828601612888565b9150509250929050565b600080600060408486031215612b3957600080fd5b6000612b4786828701612873565b935050602084013567ffffffffffffffff811115612b6457600080fd5b612b708682870161291b565b92509250509250925092565b60008060408385031215612b8f57600080fd5b6000612b9d85828601612873565b9250506020612bae8582860161298f565b9150509250929050565b600060208284031215612bca57600080fd5b6000612bd884828501612888565b91505092915050565b600060208284031215612bf357600080fd5b6000612c018482850161289d565b91505092915050565b600060208284031215612c1c57600080fd5b6000612c2a848285016128b2565b91505092915050565b600060208284031215612c4557600080fd5b6000612c53848285016128c7565b91505092915050565b600060208284031215612c6e57600080fd5b6000612c7c84828501612906565b91505092915050565b600060208284031215612c9757600080fd5b600082013567ffffffffffffffff811115612cb157600080fd5b612cbd84828501612965565b91505092915050565b600080600060608486031215612cdb57600080fd5b600084013567ffffffffffffffff811115612cf557600080fd5b612d0186828701612965565b935050602084013567ffffffffffffffff811115612d1e57600080fd5b612d2a86828701612965565b9250506040612d3b86828701612873565b9150509250925092565b600060208284031215612d5757600080fd5b6000612d658482850161298f565b91505092915050565b600060208284031215612d8057600080fd5b6000612d8e848285016129a4565b91505092915050565b612da0816132bc565b82525050565b612daf816132bc565b82525050565b612dbe816132ce565b82525050565b6000612dcf826131ad565b612dd981856131c3565b9350612de9818560208601613384565b612df281613550565b840191505092915050565b612e0681613363565b82525050565b6000612e17826131b8565b612e2181856131d4565b9350612e31818560208601613384565b612e3a81613550565b840191505092915050565b6000612e50826131b8565b612e5a81856131e5565b9350612e6a818560208601613384565b612e7381613550565b840191505092915050565b6000612e89826131b8565b612e9381856131f6565b9350612ea3818560208601613384565b80840191505092915050565b6000612ebc602e836131e5565b9150612ec782613561565b604082019050919050565b6000612edf601f836131e5565b9150612eea826135b0565b602082019050919050565b6000604083016000830151612f0d6000860182612d97565b5060208301518482036020860152612f258282612e0c565b9150508091505092915050565b612f3b81613338565b82525050565b612f4a81613342565b82525050565b6000612f5c8285612e7e565b9150612f688284612e7e565b91508190509392505050565b6000602082019050612f896000830184612da6565b92915050565b6000608082019050612fa46000830187612da6565b612fb16020830186612da6565b612fbe6040830185612f32565b8181036060830152612fd08184612dc4565b905095945050505050565b6000604082019050612ff06000830185612da6565b612ffd6020830184612f32565b9392505050565b60006020820190506130196000830184612db5565b92915050565b600060a08201905081810360008301526130398188612dc4565b9050818103602083015261304d8187612ef5565b905081810360408301526130618186612dc4565b90506130706060830185612f41565b81810360808301526130828184612dc4565b90509695505050505050565b60006020820190506130a36000830184612dfd565b92915050565b600060208201905081810360008301526130c38184612e45565b905092915050565b600060208201905081810360008301526130e481612eaf565b9050919050565b6000602082019050818103600083015261310481612ed2565b9050919050565b60006020820190506131206000830184612f32565b92915050565b6000613130613141565b905061313c82826133e9565b919050565b6000604051905090565b600067ffffffffffffffff82111561316657613165613521565b5b61316f82613550565b9050602081019050919050565b600067ffffffffffffffff82111561319757613196613521565b5b6131a082613550565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061320c82613338565b915061321783613338565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561324c5761324b613494565b5b828201905092915050565b600061326282613338565b915061326d83613338565b92508261327d5761327c6134c3565b5b828204905092915050565b600061329382613338565b915061329e83613338565b9250828210156132b1576132b0613494565b5b828203905092915050565b60006132c782613318565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613311826132bc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b600061336e82613356565b9050919050565b82818337600083830152505050565b60005b838110156133a2578082015181840152602081019050613387565b838111156133b1576000848401525b50505050565b600060028204905060018216806133cf57607f821691505b602082108114156133e3576133e26134f2565b5b50919050565b6133f282613550565b810181811067ffffffffffffffff8211171561341157613410613521565b5b80604052505050565b600061342582613338565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561345857613457613494565b5b600182019050919050565b600061346e82613338565b915061347983613338565b925082613489576134886134c3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6135e2816132bc565b81146135ed57600080fd5b50565b6135f9816132ce565b811461360457600080fd5b50565b613610816132da565b811461361b57600080fd5b50565b61362781613306565b811461363257600080fd5b50565b61363e81613338565b811461364957600080fd5b5056fea264697066735822122023e2bc9c0c4e122f629aa2a96697da1c08eebbca2e701727f29c2a4917819aa064736f6c63430008040033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162003f0838038062003f0883398181016040528101906200003791906200040c565b60016000819055506040518060a001604052806040518060400160405280600681526020017f4552433732310000000000000000000000000000000000000000000000000000815250815260200160405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c6c696e6b2e6e6574000000000000000081525081525081526020016040518060400160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250815260200165032a361e860667ffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c4c696e6b2e6e657400000000000000008152508152506002600082015181600001908051906020019062000194929190620002b4565b5060208201518160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906200020392919062000345565b505050604082015181600301908051906020019062000224929190620002b4565b5060608201518160040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550608082015181600501908051906020019062000272929190620002b4565b509050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050620004eb565b828054620002c2906200046c565b90600052602060002090601f016020900481019282620002e6576000855562000332565b82601f106200030157805160ff191683800117855562000332565b8280016001018555821562000332579182015b828111156200033157825182559160200191906001019062000314565b5b509050620003419190620003d6565b5090565b82805462000353906200046c565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b6000815190506200040681620004d1565b92915050565b6000602082840312156200041f57600080fd5b60006200042f84828501620003f5565b91505092915050565b600062000445826200044c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048557607f821691505b602082108114156200049c576200049b620004a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620004dc8162000438565b8114620004e857600080fd5b50565b60805160601c6139fe6200050a6000396000611a4f01526139fe6000f3fe60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105cd578063ce606ee01461060a578063e985e9c514610635578063f4a0a528146106725761019c565b8063a035b1fe14610550578063a22cb4651461057b578063b88d4fde146105a45761019c565b80636a627842116100c65780636a6278421461048d57806370a08231146104bd578063714c5398146104fa57806395d89b41146105255761019c565b806355f804b3146103fe5780635aca1bb6146104275780636352211e146104505761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103665780633ccfd60b1461039557806342842e0e146103ac57806349df728c146103d55761019c565b8063217cc2b4146102c357806323b872dd1461030057806327fbceac146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612f4f565b61069b565b6040516101d59190613349565b60405180910390f35b3480156101ea57600080fd5b506101f361077d565b60405161020091906133ee565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061300b565b61080f565b005b34801561023e57600080fd5b506102596004803603810190610254919061308a565b610996565b60405161026691906132b9565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612ec1565b6109dc565b005b3480156102a457600080fd5b506102ad610ae5565b6040516102ba9190613349565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612cfe565b610af8565b6040516102f79190613487565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612d63565b610ba0565b005b34801561033557600080fd5b50610350600480360381019061034b9190612e69565b610bf7565b60405161035d9190613487565b60405180910390f35b34801561037257600080fd5b5061037b610dab565b60405161038c959493929190613364565b60405180910390f35b3480156103a157600080fd5b506103aa61106d565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612d63565b611143565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612fa1565b611163565b005b34801561040a57600080fd5b5061042560048036038101906104209190612fca565b611309565b005b34801561043357600080fd5b5061044e60048036038101906104499190612efd565b6113aa565b005b34801561045c57600080fd5b506104776004803603810190610472919061308a565b61144e565b60405161048491906132b9565b60405180910390f35b6104a760048036038101906104a29190612cfe565b6114f7565b6040516104b49190613487565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190612cfe565b6115f7565b6040516104f19190613487565b60405180910390f35b34801561050657600080fd5b5061050f6116a6565b60405161051c91906133ee565b60405180910390f35b34801561053157600080fd5b5061053a611738565b60405161054791906133ee565b60405180910390f35b34801561055c57600080fd5b506105656117ca565b6040516105729190613487565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612e2d565b6117d0565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190612db2565b6117e6565b005b3480156105d957600080fd5b506105f460048036038101906105ef919061308a565b61183f565b60405161060191906133ee565b60405180910390f35b34801561061657600080fd5b5061061f611a4d565b60405161062c91906132b9565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190612d27565b611a71565b6040516106699190613349565b60405180910390f35b34801561067e57600080fd5b506106996004803603810190610694919061308a565b611b05565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610776575061077582611b96565b5b9050919050565b6060600b805461078c90613733565b80601f01602080910402602001604051908101604052809291908181526020018280546107b890613733565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b600061081b6001611c00565b9050801561083e5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108c7576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108dd929190612a13565b5083600c90805190602001906108f4929190612a13565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156109905760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161098791906133d3565b60405180910390a15b50505050565b60006109a182611cf2565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e78261144e565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a4f576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6e611d34565b73ffffffffffffffffffffffffffffffffffffffff16141580610a9f5750610a9d81610a98611d34565b611a71565b155b15610ad6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae08383611d3c565b505050565b600f60009054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b8b611df5565b9050610b978382611e10565b80915050919050565b610bb1610bab611d34565b82611e2e565b610be7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf2838383611ec3565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c80576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c8a611df5565b9050610c968582611e10565b6000848490501115610cc6578383601460008481526020019081526020016000209190610cc4929190612a99565b505b610da06040518060400160405280600381526020017f7572690000000000000000000000000000000000000000000000000000000000815250601460008481526020019081526020016000208054610d1d90613733565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4990613733565b8015610d965780601f10610d6b57610100808354040283529160200191610d96565b820191906000526020600020905b815481529060010190602001808311610d7957829003601f168201915b5050505050612118565b809150509392505050565b6002806000018054610dbc90613733565b80601f0160208091040260200160405190810160405280929190818152602001828054610de890613733565b8015610e355780601f10610e0a57610100808354040283529160200191610e35565b820191906000526020600020905b815481529060010190602001808311610e1857829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610eb090613733565b80601f0160208091040260200160405190810160405280929190818152602001828054610edc90613733565b8015610f295780601f10610efe57610100808354040283529160200191610f29565b820191906000526020600020905b815481529060010190602001808311610f0c57829003601f168201915b50505050508152505090806003018054610f4290613733565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6e90613733565b8015610fbb5780601f10610f9057610100808354040283529160200191610fbb565b820191906000526020600020905b815481529060010190602001808311610f9e57829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610fea90613733565b80601f016020809104026020016040519081016040528092919081815260200182805461101690613733565b80156110635780601f1061103857610100808354040283529160200191611063565b820191906000526020600020905b81548152906001019060200180831161104657829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561113f573d6000803e3d6000fd5b5050565b61115e838383604051806020016040528060008152506117e6565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111ea576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161122591906132b9565b60206040518083038186803b15801561123d57600080fd5b505afa158015611251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127591906130b3565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016112b2929190613320565b602060405180830381600087803b1580156112cc57600080fd5b505af11580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190612f26565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611390576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90805190602001906113a6929190612a13565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611431576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ee576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b60006002600054141561153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153690613467565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff1615151415611595576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146115d0576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115da611df5565b90506115e68382611e10565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546116b590613733565b80601f01602080910402602001604051908101604052809291908181526020018280546116e190613733565b801561172e5780601f106117035761010080835404028352916020019161172e565b820191906000526020600020905b81548152906001019060200180831161171157829003601f168201915b5050505050905090565b6060600c805461174790613733565b80601f016020809104026020016040519081016040528092919081815260200182805461177390613733565b80156117c05780601f10611795576101008083540402835291602001916117c0565b820191906000526020600020905b8154815290600101906020018083116117a357829003601f168201915b5050505050905090565b600e5481565b6117e26117db611d34565b83836121b4565b5050565b6117f76117f1611d34565b83611e2e565b61182d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118398484848461237f565b50505050565b606061184a82611cf2565b600060146000848152602001908152602001600020805461186a90613733565b905011156119ef5761194c6040518060400160405280600381526020017f75726900000000000000000000000000000000000000000000000000000000008152506014600085815260200190815260200160002080546118c990613733565b80601f01602080910402602001604051908101604052809291908181526020018280546118f590613733565b80156119425780601f1061191757610100808354040283529160200191611942565b820191906000526020600020905b81548152906001019060200180831161192557829003601f168201915b5050505050612118565b60146000838152602001908152602001600020805461196a90613733565b80601f016020809104026020016040519081016040528092919081815260200182805461199690613733565b80156119e35780601f106119b8576101008083540402835291602001916119e3565b820191906000526020600020905b8154815290600101906020018083116119c657829003601f168201915b50505050509050611a48565b60006119f96123d2565b90506000815111611a195760405180602001604052806000815250611a44565b80611a23846123e9565b604051602001611a34929190613295565b6040516020818303038152906040525b9150505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b8c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff1615611c765760018260ff16148015611c2e5750611c2c30612596565b155b611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490613447565b60405180910390fd5b60009050611ced565b8160ff16600160009054906101000a900460ff1660ff1610611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490613447565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611cfb816125a9565b611d31576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611daf8361144e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e01600a612615565b611e0b600a61262b565b905090565b611e2a828260405180602001604052806000815250612639565b5050565b600080611e3a8361144e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7c5750611e7b8185611a71565b5b80611eba57508373ffffffffffffffffffffffffffffffffffffffff16611ea284610996565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ee38261144e565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f97576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa283838361268b565b611fad600082611d3c565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ffd9190613604565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612054919061357d565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612113838383612690565b505050565b6121b0828260405160240161212e929190613410565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612695565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561221b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612281576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123729190613349565b60405180910390a3505050565b61238a848484611ec3565b612396848484846126be565b6123cc576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415612431576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612591565b600082905060005b6000821461246357808061244c90613796565b915050600a8261245c91906135d3565b9150612439565b60008167ffffffffffffffff8111156124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124d75781602001600182028036833780820191505090505b5090505b6000851461258a576001826124f09190613604565b9150600a856124ff91906137df565b603061250b919061357d565b60f81b818381518110612547577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561258391906135d3565b94506124db565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b612643838361284c565b61265060008484846126be565b612686576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b60006126df8473ffffffffffffffffffffffffffffffffffffffff16612596565b1561283f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612708611d34565b8786866040518563ffffffff1660e01b815260040161272a94939291906132d4565b602060405180830381600087803b15801561274457600080fd5b505af192505050801561277557506040513d601f19601f820116820180604052508101906127729190612f78565b60015b6127ef573d80600081146127a5576040519150601f19603f3d011682016040523d82523d6000602084013e6127aa565b606091505b506000815114156127e7576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612844565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128b3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128bc816125a9565b156128f2576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128fe6000838361268b565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461294e919061357d565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a0f60008383612690565b5050565b828054612a1f90613733565b90600052602060002090601f016020900481019282612a415760008555612a88565b82601f10612a5a57805160ff1916838001178555612a88565b82800160010185558215612a88579182015b82811115612a87578251825591602001919060010190612a6c565b5b509050612a959190612b1f565b5090565b828054612aa590613733565b90600052602060002090601f016020900481019282612ac75760008555612b0e565b82601f10612ae057803560ff1916838001178555612b0e565b82800160010185558215612b0e579182015b82811115612b0d578235825591602001919060010190612af2565b5b509050612b1b9190612b1f565b5090565b5b80821115612b38576000816000905550600101612b20565b5090565b6000612b4f612b4a846134c7565b6134a2565b905082815260208101848484011115612b6757600080fd5b612b728482856136f1565b509392505050565b6000612b8d612b88846134f8565b6134a2565b905082815260208101848484011115612ba557600080fd5b612bb08482856136f1565b509392505050565b600081359050612bc781613955565b92915050565b600081359050612bdc8161396c565b92915050565b600081519050612bf18161396c565b92915050565b600081359050612c0681613983565b92915050565b600081519050612c1b81613983565b92915050565b600082601f830112612c3257600080fd5b8135612c42848260208601612b3c565b91505092915050565b600081359050612c5a8161399a565b92915050565b60008083601f840112612c7257600080fd5b8235905067ffffffffffffffff811115612c8b57600080fd5b602083019150836001820283011115612ca357600080fd5b9250929050565b600082601f830112612cbb57600080fd5b8135612ccb848260208601612b7a565b91505092915050565b600081359050612ce3816139b1565b92915050565b600081519050612cf8816139b1565b92915050565b600060208284031215612d1057600080fd5b6000612d1e84828501612bb8565b91505092915050565b60008060408385031215612d3a57600080fd5b6000612d4885828601612bb8565b9250506020612d5985828601612bb8565b9150509250929050565b600080600060608486031215612d7857600080fd5b6000612d8686828701612bb8565b9350506020612d9786828701612bb8565b9250506040612da886828701612cd4565b9150509250925092565b60008060008060808587031215612dc857600080fd5b6000612dd687828801612bb8565b9450506020612de787828801612bb8565b9350506040612df887828801612cd4565b925050606085013567ffffffffffffffff811115612e1557600080fd5b612e2187828801612c21565b91505092959194509250565b60008060408385031215612e4057600080fd5b6000612e4e85828601612bb8565b9250506020612e5f85828601612bcd565b9150509250929050565b600080600060408486031215612e7e57600080fd5b6000612e8c86828701612bb8565b935050602084013567ffffffffffffffff811115612ea957600080fd5b612eb586828701612c60565b92509250509250925092565b60008060408385031215612ed457600080fd5b6000612ee285828601612bb8565b9250506020612ef385828601612cd4565b9150509250929050565b600060208284031215612f0f57600080fd5b6000612f1d84828501612bcd565b91505092915050565b600060208284031215612f3857600080fd5b6000612f4684828501612be2565b91505092915050565b600060208284031215612f6157600080fd5b6000612f6f84828501612bf7565b91505092915050565b600060208284031215612f8a57600080fd5b6000612f9884828501612c0c565b91505092915050565b600060208284031215612fb357600080fd5b6000612fc184828501612c4b565b91505092915050565b600060208284031215612fdc57600080fd5b600082013567ffffffffffffffff811115612ff657600080fd5b61300284828501612caa565b91505092915050565b60008060006060848603121561302057600080fd5b600084013567ffffffffffffffff81111561303a57600080fd5b61304686828701612caa565b935050602084013567ffffffffffffffff81111561306357600080fd5b61306f86828701612caa565b925050604061308086828701612bb8565b9150509250925092565b60006020828403121561309c57600080fd5b60006130aa84828501612cd4565b91505092915050565b6000602082840312156130c557600080fd5b60006130d384828501612ce9565b91505092915050565b6130e581613638565b82525050565b6130f481613638565b82525050565b6131038161364a565b82525050565b600061311482613529565b61311e818561353f565b935061312e818560208601613700565b613137816138cc565b840191505092915050565b61314b816136df565b82525050565b600061315c82613534565b6131668185613550565b9350613176818560208601613700565b61317f816138cc565b840191505092915050565b600061319582613534565b61319f8185613561565b93506131af818560208601613700565b6131b8816138cc565b840191505092915050565b60006131ce82613534565b6131d88185613572565b93506131e8818560208601613700565b80840191505092915050565b6000613201602e83613561565b915061320c826138dd565b604082019050919050565b6000613224601f83613561565b915061322f8261392c565b602082019050919050565b600060408301600083015161325260008601826130dc565b506020830151848203602086015261326a8282613151565b9150508091505092915050565b613280816136b4565b82525050565b61328f816136be565b82525050565b60006132a182856131c3565b91506132ad82846131c3565b91508190509392505050565b60006020820190506132ce60008301846130eb565b92915050565b60006080820190506132e960008301876130eb565b6132f660208301866130eb565b6133036040830185613277565b81810360608301526133158184613109565b905095945050505050565b600060408201905061333560008301856130eb565b6133426020830184613277565b9392505050565b600060208201905061335e60008301846130fa565b92915050565b600060a082019050818103600083015261337e8188613109565b90508181036020830152613392818761323a565b905081810360408301526133a68186613109565b90506133b56060830185613286565b81810360808301526133c78184613109565b90509695505050505050565b60006020820190506133e86000830184613142565b92915050565b60006020820190508181036000830152613408818461318a565b905092915050565b6000604082019050818103600083015261342a818561318a565b9050818103602083015261343e818461318a565b90509392505050565b60006020820190508181036000830152613460816131f4565b9050919050565b6000602082019050818103600083015261348081613217565b9050919050565b600060208201905061349c6000830184613277565b92915050565b60006134ac6134bd565b90506134b88282613765565b919050565b6000604051905090565b600067ffffffffffffffff8211156134e2576134e161389d565b5b6134eb826138cc565b9050602081019050919050565b600067ffffffffffffffff8211156135135761351261389d565b5b61351c826138cc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613588826136b4565b9150613593836136b4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c8576135c7613810565b5b828201905092915050565b60006135de826136b4565b91506135e9836136b4565b9250826135f9576135f861383f565b5b828204905092915050565b600061360f826136b4565b915061361a836136b4565b92508282101561362d5761362c613810565b5b828203905092915050565b600061364382613694565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061368d82613638565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006136ea826136d2565b9050919050565b82818337600083830152505050565b60005b8381101561371e578082015181840152602081019050613703565b8381111561372d576000848401525b50505050565b6000600282049050600182168061374b57607f821691505b6020821081141561375f5761375e61386e565b5b50919050565b61376e826138cc565b810181811067ffffffffffffffff8211171561378d5761378c61389d565b5b80604052505050565b60006137a1826136b4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137d4576137d3613810565b5b600182019050919050565b60006137ea826136b4565b91506137f5836136b4565b9250826138055761380461383f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61395e81613638565b811461396957600080fd5b50565b6139758161364a565b811461398057600080fd5b50565b61398c81613656565b811461399757600080fd5b50565b6139a381613682565b81146139ae57600080fd5b50565b6139ba816136b4565b81146139c557600080fd5b5056fea26469706673582212207870419bc5f41509443c442ff6c278463fc230d94939f3f01b094ca2ea08e91d64736f6c63430008040033", + "deployedBytecode": "0x60806040526004361061019c5760003560e01c806355f804b3116100ec578063a035b1fe1161008a578063c87b56dd11610064578063c87b56dd146105cd578063ce606ee01461060a578063e985e9c514610635578063f4a0a528146106725761019c565b8063a035b1fe14610550578063a22cb4651461057b578063b88d4fde146105a45761019c565b80636a627842116100c65780636a6278421461048d57806370a08231146104bd578063714c5398146104fa57806395d89b41146105255761019c565b806355f804b3146103fe5780635aca1bb6146104275780636352211e146104505761019c565b8063217cc2b411610159578063392f37e911610133578063392f37e9146103665780633ccfd60b1461039557806342842e0e146103ac57806349df728c146103d55761019c565b8063217cc2b4146102c357806323b872dd1461030057806327fbceac146103295761019c565b806301ffc9a7146101a157806306fdde03146101de578063077f224a14610209578063081812fc14610232578063095ea7b31461026f5780631e84c41314610298575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190612f4f565b61069b565b6040516101d59190613349565b60405180910390f35b3480156101ea57600080fd5b506101f361077d565b60405161020091906133ee565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b919061300b565b61080f565b005b34801561023e57600080fd5b506102596004803603810190610254919061308a565b610996565b60405161026691906132b9565b60405180910390f35b34801561027b57600080fd5b5061029660048036038101906102919190612ec1565b6109dc565b005b3480156102a457600080fd5b506102ad610ae5565b6040516102ba9190613349565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e59190612cfe565b610af8565b6040516102f79190613487565b60405180910390f35b34801561030c57600080fd5b5061032760048036038101906103229190612d63565b610ba0565b005b34801561033557600080fd5b50610350600480360381019061034b9190612e69565b610bf7565b60405161035d9190613487565b60405180910390f35b34801561037257600080fd5b5061037b610dab565b60405161038c959493929190613364565b60405180910390f35b3480156103a157600080fd5b506103aa61106d565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190612d63565b611143565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190612fa1565b611163565b005b34801561040a57600080fd5b5061042560048036038101906104209190612fca565b611309565b005b34801561043357600080fd5b5061044e60048036038101906104499190612efd565b6113aa565b005b34801561045c57600080fd5b506104776004803603810190610472919061308a565b61144e565b60405161048491906132b9565b60405180910390f35b6104a760048036038101906104a29190612cfe565b6114f7565b6040516104b49190613487565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190612cfe565b6115f7565b6040516104f19190613487565b60405180910390f35b34801561050657600080fd5b5061050f6116a6565b60405161051c91906133ee565b60405180910390f35b34801561053157600080fd5b5061053a611738565b60405161054791906133ee565b60405180910390f35b34801561055c57600080fd5b506105656117ca565b6040516105729190613487565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612e2d565b6117d0565b005b3480156105b057600080fd5b506105cb60048036038101906105c69190612db2565b6117e6565b005b3480156105d957600080fd5b506105f460048036038101906105ef919061308a565b61183f565b60405161060191906133ee565b60405180910390f35b34801561061657600080fd5b5061061f611a4d565b60405161062c91906132b9565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190612d27565b611a71565b6040516106699190613349565b60405180910390f35b34801561067e57600080fd5b506106996004803603810190610694919061308a565b611b05565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061076657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610776575061077582611b96565b5b9050919050565b6060600b805461078c90613733565b80601f01602080910402602001604051908101604052809291908181526020018280546107b890613733565b80156108055780601f106107da57610100808354040283529160200191610805565b820191906000526020600020905b8154815290600101906020018083116107e857829003601f168201915b5050505050905090565b600061081b6001611c00565b9050801561083e5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108c7576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b90805190602001906108dd929190612a13565b5083600c90805190602001906108f4929190612a13565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156109905760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161098791906133d3565b60405180910390a15b50505050565b60006109a182611cf2565b6012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e78261144e565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a4f576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a6e611d34565b73ffffffffffffffffffffffffffffffffffffffff16141580610a9f5750610a9d81610a98611d34565b611a71565b155b15610ad6576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ae08383611d3c565b505050565b600f60009054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b81576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b8b611df5565b9050610b978382611e10565b80915050919050565b610bb1610bab611d34565b82611e2e565b610be7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf2838383611ec3565b505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c80576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c8a611df5565b9050610c968582611e10565b6000848490501115610cc6578383601460008481526020019081526020016000209190610cc4929190612a99565b505b610da06040518060400160405280600381526020017f7572690000000000000000000000000000000000000000000000000000000000815250601460008481526020019081526020016000208054610d1d90613733565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4990613733565b8015610d965780601f10610d6b57610100808354040283529160200191610d96565b820191906000526020600020905b815481529060010190602001808311610d7957829003601f168201915b5050505050612118565b809150509392505050565b6002806000018054610dbc90613733565b80601f0160208091040260200160405190810160405280929190818152602001828054610de890613733565b8015610e355780601f10610e0a57610100808354040283529160200191610e35565b820191906000526020600020905b815481529060010190602001808311610e1857829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054610eb090613733565b80601f0160208091040260200160405190810160405280929190818152602001828054610edc90613733565b8015610f295780601f10610efe57610100808354040283529160200191610f29565b820191906000526020600020905b815481529060010190602001808311610f0c57829003601f168201915b50505050508152505090806003018054610f4290613733565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6e90613733565b8015610fbb5780601f10610f9057610100808354040283529160200191610fbb565b820191906000526020600020905b815481529060010190602001808311610f9e57829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff1690806005018054610fea90613733565b80601f016020809104026020016040519081016040528092919081815260200182805461101690613733565b80156110635780601f1061103857610100808354040283529160200191611063565b820191906000526020600020905b81548152906001019060200180831161104657829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561113f573d6000803e3d6000fd5b5050565b61115e838383604051806020016040528060008152506117e6565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111ea576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161122591906132b9565b60206040518083038186803b15801561123d57600080fd5b505afa158015611251573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127591906130b3565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016112b2929190613320565b602060405180830381600087803b1580156112cc57600080fd5b505af11580156112e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113049190612f26565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611390576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90805190602001906113a6929190612a13565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611431576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000806010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ee576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b60006002600054141561153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153690613467565b60405180910390fd5b600260008190555060001515600f60009054906101000a900460ff1615151415611595576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5434146115d0576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006115da611df5565b90506115e68382611e10565b809150506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561165f576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d80546116b590613733565b80601f01602080910402602001604051908101604052809291908181526020018280546116e190613733565b801561172e5780601f106117035761010080835404028352916020019161172e565b820191906000526020600020905b81548152906001019060200180831161171157829003601f168201915b5050505050905090565b6060600c805461174790613733565b80601f016020809104026020016040519081016040528092919081815260200182805461177390613733565b80156117c05780601f10611795576101008083540402835291602001916117c0565b820191906000526020600020905b8154815290600101906020018083116117a357829003601f168201915b5050505050905090565b600e5481565b6117e26117db611d34565b83836121b4565b5050565b6117f76117f1611d34565b83611e2e565b61182d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118398484848461237f565b50505050565b606061184a82611cf2565b600060146000848152602001908152602001600020805461186a90613733565b905011156119ef5761194c6040518060400160405280600381526020017f75726900000000000000000000000000000000000000000000000000000000008152506014600085815260200190815260200160002080546118c990613733565b80601f01602080910402602001604051908101604052809291908181526020018280546118f590613733565b80156119425780601f1061191757610100808354040283529160200191611942565b820191906000526020600020905b81548152906001019060200180831161192557829003601f168201915b5050505050612118565b60146000838152602001908152602001600020805461196a90613733565b80601f016020809104026020016040519081016040528092919081815260200182805461199690613733565b80156119e35780601f106119b8576101008083540402835291602001916119e3565b820191906000526020600020905b8154815290600101906020018083116119c657829003601f168201915b50505050509050611a48565b60006119f96123d2565b90506000815111611a195760405180602001604052806000815250611a44565b80611a23846123e9565b604051602001611a34929190613295565b6040516020818303038152906040525b9150505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b8c576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600e8190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff1615611c765760018260ff16148015611c2e5750611c2c30612596565b155b611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490613447565b60405180910390fd5b60009050611ced565b8160ff16600160009054906101000a900460ff1660ff1610611ccd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc490613447565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b611cfb816125a9565b611d31576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816012600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611daf8361144e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e01600a612615565b611e0b600a61262b565b905090565b611e2a828260405180602001604052806000815250612639565b5050565b600080611e3a8361144e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7c5750611e7b8185611a71565b5b80611eba57508373ffffffffffffffffffffffffffffffffffffffff16611ea284610996565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ee38261144e565b73ffffffffffffffffffffffffffffffffffffffff1614611f30576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f97576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa283838361268b565b611fad600082611d3c565b6001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ffd9190613604565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612054919061357d565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612113838383612690565b505050565b6121b0828260405160240161212e929190613410565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612695565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561221b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612281576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123729190613349565b60405180910390a3505050565b61238a848484611ec3565b612396848484846126be565b6123cc576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606000821415612431576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612591565b600082905060005b6000821461246357808061244c90613796565b915050600a8261245c91906135d3565b9150612439565b60008167ffffffffffffffff8111156124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124d75781602001600182028036833780820191505090505b5090505b6000851461258a576001826124f09190613604565b9150600a856124ff91906137df565b603061250b919061357d565b60f81b818381518110612547577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561258391906135d3565b94506124db565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166010600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b612643838361284c565b61265060008484846126be565b612686576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b60006126df8473ffffffffffffffffffffffffffffffffffffffff16612596565b1561283f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612708611d34565b8786866040518563ffffffff1660e01b815260040161272a94939291906132d4565b602060405180830381600087803b15801561274457600080fd5b505af192505050801561277557506040513d601f19601f820116820180604052508101906127729190612f78565b60015b6127ef573d80600081146127a5576040519150601f19603f3d011682016040523d82523d6000602084013e6127aa565b606091505b506000815114156127e7576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612844565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128b3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128bc816125a9565b156128f2576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128fe6000838361268b565b6001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461294e919061357d565b92505081905550816010600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a0f60008383612690565b5050565b828054612a1f90613733565b90600052602060002090601f016020900481019282612a415760008555612a88565b82601f10612a5a57805160ff1916838001178555612a88565b82800160010185558215612a88579182015b82811115612a87578251825591602001919060010190612a6c565b5b509050612a959190612b1f565b5090565b828054612aa590613733565b90600052602060002090601f016020900481019282612ac75760008555612b0e565b82601f10612ae057803560ff1916838001178555612b0e565b82800160010185558215612b0e579182015b82811115612b0d578235825591602001919060010190612af2565b5b509050612b1b9190612b1f565b5090565b5b80821115612b38576000816000905550600101612b20565b5090565b6000612b4f612b4a846134c7565b6134a2565b905082815260208101848484011115612b6757600080fd5b612b728482856136f1565b509392505050565b6000612b8d612b88846134f8565b6134a2565b905082815260208101848484011115612ba557600080fd5b612bb08482856136f1565b509392505050565b600081359050612bc781613955565b92915050565b600081359050612bdc8161396c565b92915050565b600081519050612bf18161396c565b92915050565b600081359050612c0681613983565b92915050565b600081519050612c1b81613983565b92915050565b600082601f830112612c3257600080fd5b8135612c42848260208601612b3c565b91505092915050565b600081359050612c5a8161399a565b92915050565b60008083601f840112612c7257600080fd5b8235905067ffffffffffffffff811115612c8b57600080fd5b602083019150836001820283011115612ca357600080fd5b9250929050565b600082601f830112612cbb57600080fd5b8135612ccb848260208601612b7a565b91505092915050565b600081359050612ce3816139b1565b92915050565b600081519050612cf8816139b1565b92915050565b600060208284031215612d1057600080fd5b6000612d1e84828501612bb8565b91505092915050565b60008060408385031215612d3a57600080fd5b6000612d4885828601612bb8565b9250506020612d5985828601612bb8565b9150509250929050565b600080600060608486031215612d7857600080fd5b6000612d8686828701612bb8565b9350506020612d9786828701612bb8565b9250506040612da886828701612cd4565b9150509250925092565b60008060008060808587031215612dc857600080fd5b6000612dd687828801612bb8565b9450506020612de787828801612bb8565b9350506040612df887828801612cd4565b925050606085013567ffffffffffffffff811115612e1557600080fd5b612e2187828801612c21565b91505092959194509250565b60008060408385031215612e4057600080fd5b6000612e4e85828601612bb8565b9250506020612e5f85828601612bcd565b9150509250929050565b600080600060408486031215612e7e57600080fd5b6000612e8c86828701612bb8565b935050602084013567ffffffffffffffff811115612ea957600080fd5b612eb586828701612c60565b92509250509250925092565b60008060408385031215612ed457600080fd5b6000612ee285828601612bb8565b9250506020612ef385828601612cd4565b9150509250929050565b600060208284031215612f0f57600080fd5b6000612f1d84828501612bcd565b91505092915050565b600060208284031215612f3857600080fd5b6000612f4684828501612be2565b91505092915050565b600060208284031215612f6157600080fd5b6000612f6f84828501612bf7565b91505092915050565b600060208284031215612f8a57600080fd5b6000612f9884828501612c0c565b91505092915050565b600060208284031215612fb357600080fd5b6000612fc184828501612c4b565b91505092915050565b600060208284031215612fdc57600080fd5b600082013567ffffffffffffffff811115612ff657600080fd5b61300284828501612caa565b91505092915050565b60008060006060848603121561302057600080fd5b600084013567ffffffffffffffff81111561303a57600080fd5b61304686828701612caa565b935050602084013567ffffffffffffffff81111561306357600080fd5b61306f86828701612caa565b925050604061308086828701612bb8565b9150509250925092565b60006020828403121561309c57600080fd5b60006130aa84828501612cd4565b91505092915050565b6000602082840312156130c557600080fd5b60006130d384828501612ce9565b91505092915050565b6130e581613638565b82525050565b6130f481613638565b82525050565b6131038161364a565b82525050565b600061311482613529565b61311e818561353f565b935061312e818560208601613700565b613137816138cc565b840191505092915050565b61314b816136df565b82525050565b600061315c82613534565b6131668185613550565b9350613176818560208601613700565b61317f816138cc565b840191505092915050565b600061319582613534565b61319f8185613561565b93506131af818560208601613700565b6131b8816138cc565b840191505092915050565b60006131ce82613534565b6131d88185613572565b93506131e8818560208601613700565b80840191505092915050565b6000613201602e83613561565b915061320c826138dd565b604082019050919050565b6000613224601f83613561565b915061322f8261392c565b602082019050919050565b600060408301600083015161325260008601826130dc565b506020830151848203602086015261326a8282613151565b9150508091505092915050565b613280816136b4565b82525050565b61328f816136be565b82525050565b60006132a182856131c3565b91506132ad82846131c3565b91508190509392505050565b60006020820190506132ce60008301846130eb565b92915050565b60006080820190506132e960008301876130eb565b6132f660208301866130eb565b6133036040830185613277565b81810360608301526133158184613109565b905095945050505050565b600060408201905061333560008301856130eb565b6133426020830184613277565b9392505050565b600060208201905061335e60008301846130fa565b92915050565b600060a082019050818103600083015261337e8188613109565b90508181036020830152613392818761323a565b905081810360408301526133a68186613109565b90506133b56060830185613286565b81810360808301526133c78184613109565b90509695505050505050565b60006020820190506133e86000830184613142565b92915050565b60006020820190508181036000830152613408818461318a565b905092915050565b6000604082019050818103600083015261342a818561318a565b9050818103602083015261343e818461318a565b90509392505050565b60006020820190508181036000830152613460816131f4565b9050919050565b6000602082019050818103600083015261348081613217565b9050919050565b600060208201905061349c6000830184613277565b92915050565b60006134ac6134bd565b90506134b88282613765565b919050565b6000604051905090565b600067ffffffffffffffff8211156134e2576134e161389d565b5b6134eb826138cc565b9050602081019050919050565b600067ffffffffffffffff8211156135135761351261389d565b5b61351c826138cc565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613588826136b4565b9150613593836136b4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c8576135c7613810565b5b828201905092915050565b60006135de826136b4565b91506135e9836136b4565b9250826135f9576135f861383f565b5b828204905092915050565b600061360f826136b4565b915061361a836136b4565b92508282101561362d5761362c613810565b5b828203905092915050565b600061364382613694565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061368d82613638565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b60006136ea826136d2565b9050919050565b82818337600083830152505050565b60005b8381101561371e578082015181840152602081019050613703565b8381111561372d576000848401525b50505050565b6000600282049050600182168061374b57607f821691505b6020821081141561375f5761375e61386e565b5b50919050565b61376e826138cc565b810181811067ffffffffffffffff8211171561378d5761378c61389d565b5b80604052505050565b60006137a1826136b4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137d4576137d3613810565b5b600182019050919050565b60006137ea826136b4565b91506137f5836136b4565b9250826138055761380461383f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61395e81613638565b811461396957600080fd5b50565b6139758161364a565b811461398057600080fd5b50565b61398c81613656565b811461399757600080fd5b50565b6139a381613682565b81146139ae57600080fd5b50565b6139ba816136b4565b81146139c557600080fd5b5056fea26469706673582212207870419bc5f41509443c442ff6c278463fc230d94939f3f01b094ca2ea08e91d64736f6c63430008040033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json index 25c04c3d..95e38544 100644 --- a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json +++ b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json @@ -183,8 +183,8 @@ "type": "function" } ], - "bytecode": "0x60c060405234801561001057600080fd5b50604051610d76380380610d76833981810160405281019061003291906100bc565b8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050610141565b6000815190506100b68161012a565b92915050565b600080604083850312156100cf57600080fd5b60006100dd858286016100a7565b92505060206100ee858286016100a7565b9150509250929050565b60006101038261010a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610133816100f8565b811461013e57600080fd5b50565b60805160601c60a05160601c610bfc61017a60003960008181610457015261065b01526000818161019701526103470152610bfc6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea2646970667358221220b15f140ef5ce67285c4130e8f0aafe0ea7f8da961e5575be390f41801c9eadb564736f6c63430008040033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea2646970667358221220b15f140ef5ce67285c4130e8f0aafe0ea7f8da961e5575be390f41801c9eadb564736f6c63430008040033", + "bytecode": "0x60c060405234801561001057600080fd5b50604051610d76380380610d76833981810160405281019061003291906100bc565b8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050610141565b6000815190506100b68161012a565b92915050565b600080604083850312156100cf57600080fd5b60006100dd858286016100a7565b92505060206100ee858286016100a7565b9150509250929050565b60006101038261010a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610133816100f8565b811461013e57600080fd5b50565b60805160601c60a05160601c610bfc61017a60003960008181610457015261065b01526000818161019701526103470152610bfc6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea26469706673582212206ee2c0f75369184984474413703216316b34503668abbfbc3f82ee128971216364736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea26469706673582212206ee2c0f75369184984474413703216316b34503668abbfbc3f82ee128971216364736f6c63430008040033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/packages/hyperverse-evm-erc721/contracts.json b/packages/hyperverse-evm-erc721/contracts.json index 432e3cf1..80cf860b 100644 --- a/packages/hyperverse-evm-erc721/contracts.json +++ b/packages/hyperverse-evm-erc721/contracts.json @@ -15,8 +15,8 @@ }, "ethereum": { "testnet": { - "contractAddress": "0xC0C76682E65A32e8b56f3a40a1b46dc9B4E3D51C", - "factoryAddress": "0x317C0916563Ecf0752b1DC886Ae92B685bfE6feE" + "contractAddress": "0x01ddA83E8220326408dbbf30e1E28eA8230be0FE", + "factoryAddress": "0x86d00f4818ffF1092A75b8C06D60925B0A200c5d" }, "mainnet": {} }, diff --git a/packages/hyperverse-evm-erc721/source/erc721Library.ts b/packages/hyperverse-evm-erc721/source/erc721Library.ts index f3c3694b..c436caf3 100644 --- a/packages/hyperverse-evm-erc721/source/erc721Library.ts +++ b/packages/hyperverse-evm-erc721/source/erc721Library.ts @@ -50,13 +50,26 @@ export async function ERC721LibraryInternal( } }; - const tenantMint = async ({ to, image }: { to: string; image?: File }) => { + const tenantMint = async ({ to, image }: { image?: File; to: string; }) => { try { let mintTxn; - + const erc72Name = await base.proxyContract?.name(); if (image) { const tokenUri = await hyperverse.storage?.uploadFile(image); - mintTxn = await base.proxyContract?.['tenantMint(address string)'](to, tokenUri); + const Metadata = { + image: `https://ipfs.io/ipfs/${tokenUri}`, + name : `${erc72Name}`, + } + const metadataFile = new File([JSON.stringify(Metadata)], 'metadata.json'); + const metadataFileLink = await hyperverse!.storage!.uploadFile( + metadataFile + ); + + mintTxn = await base.proxyContract?.['tenantMint(address,string)'](to, metadataFileLink, { + gasLimit: '1000000' + }); + + } else { mintTxn = await base.proxyContract?.['tenantMint(address)'](to); @@ -68,14 +81,6 @@ export async function ERC721LibraryInternal( } }; - const tenantMintUri = async ({ to, tokenURI }: { to: string; tokenURI: string }) => { - try { - const mintTxn = await base.proxyContract?.tenantMint(to, tokenURI); - return mintTxn.wait() as TransactionReceipt; - } catch (error) { - throw error; - } - }; const getBaseURI = async () => { try { @@ -195,7 +200,6 @@ export async function ERC721LibraryInternal( mint, togglePublicMint, tenantMint, - tenantMintUri, getBaseURI, setMintPrice, setBaseURI, From 4f474255dca5ce52eb8334572853f70f7ab91342 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Thu, 16 Jun 2022 21:56:30 -0400 Subject: [PATCH 08/20] css update --- apps/ethereum/eth-hyperverse/package.json | 1 + .../src/components/Modules/ERC721.tsx | 10 +- .../Modules/shared/CreateInstance.tsx | 8 +- .../components/Modules/shared/Dashboard.tsx | 6 +- .../components/Modules/shared/Instance.tsx | 24 ++- .../Modules/shared/ModuleStyles.tsx | 10 +- .../src/components/Playground/Nav.tsx | 64 -------- .../components/Playground/PlaygroundBody.tsx | 143 ++++++++++-------- .../src/components/Playground/index.tsx | 3 +- .../src/components/basics/Nav.tsx | 71 +++++++++ apps/ethereum/eth-hyperverse/src/consts.ts | 2 + .../eth-hyperverse/src/context/MediaQuery.tsx | 25 +++ .../eth-hyperverse/src/pages/_app.tsx | 12 +- .../eth-hyperverse/src/pages/index.tsx | 2 +- .../src/pages/modules/[module].tsx | 2 +- .../eth-hyperverse/stitches.config.ts | 11 ++ 16 files changed, 238 insertions(+), 156 deletions(-) delete mode 100644 apps/ethereum/eth-hyperverse/src/components/Playground/Nav.tsx create mode 100644 apps/ethereum/eth-hyperverse/src/components/basics/Nav.tsx create mode 100644 apps/ethereum/eth-hyperverse/src/context/MediaQuery.tsx diff --git a/apps/ethereum/eth-hyperverse/package.json b/apps/ethereum/eth-hyperverse/package.json index fa755777..57650141 100644 --- a/apps/ethereum/eth-hyperverse/package.json +++ b/apps/ethereum/eth-hyperverse/package.json @@ -29,6 +29,7 @@ "react-query": "^3.38.0", "react-toastify": "^8.2.0", "shiki": "^0.10.1", + "unstated-next": "^1.1.0", "use-media": "^1.4.0" }, "devDependencies": { diff --git a/apps/ethereum/eth-hyperverse/src/components/Modules/ERC721.tsx b/apps/ethereum/eth-hyperverse/src/components/Modules/ERC721.tsx index 394dfa2f..4f981e7b 100644 --- a/apps/ethereum/eth-hyperverse/src/components/Modules/ERC721.tsx +++ b/apps/ethereum/eth-hyperverse/src/components/Modules/ERC721.tsx @@ -34,9 +34,9 @@ export const ERC721 = () => { Dashboard - {/* - Playground - */} + + Code + { txnLoading={txnLoading} /> + + + + {/* diff --git a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/CreateInstance.tsx b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/CreateInstance.tsx index 0b638e1c..c32c4c57 100644 --- a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/CreateInstance.tsx +++ b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/CreateInstance.tsx @@ -136,13 +136,14 @@ export const CreateInstance = ({ createInstanceFn, txnLoading }: ReadFunctionPro export const InstanceContainer = styled('div', { display: 'flex', - justifyContent: 'space-between', alignItems: 'center', background: '$blue200', borderRadius: 14, padding: 20, boxShadow: '2px 2px 2px #342F4E', - width: '95%', + width: 'calc(100% - 50px)', + flexDirection: 'row', + justifyContent: 'space-between', }) const Info = styled('div', { @@ -255,6 +256,3 @@ const InputContainer = styled('div', { marginTop: 18, }) -const Submit = styled('input', { - display: 'flex', -}) diff --git a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx index f3fb208f..e672519c 100644 --- a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx +++ b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx @@ -85,10 +85,10 @@ export const Dashboard = ({ module, instance, isLoading, createInstance, txnLoad {dappstarter && ( <> DappStarter - + {/*

{dappstarter.app}

-
+
*/} )} @@ -130,7 +130,7 @@ const CodeContainer = styled('div', { padding: 20, marginBottom: 20, boxShadow: '2px 2px 2px #342F4E', - maxWidth: 1000, + h3: { fontFamily: '$mono', fontWeight: '400', diff --git a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Instance.tsx b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Instance.tsx index 32c662ec..64324cad 100644 --- a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Instance.tsx +++ b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Instance.tsx @@ -4,14 +4,27 @@ import { styled } from '../../../../stitches.config' import { SmartModules } from '../../Playground/PlaygroundBody' import { InstanceContainer } from './CreateInstance' import { CopyIcon } from './ModuleStyles' +import { MediaQuery } from '../../../context/MediaQuery' + +const shortenHash = (hash: string = '', charLength: number = 6, postCharLength?: number) => { + let shortendHash; + if (postCharLength) { + shortendHash = + hash.slice(0, charLength) + + '...' + + hash.slice(hash.length - postCharLength, hash.length); + } else { + shortendHash = hash.slice(0, charLength); + } + return shortendHash; +}; export const Instance = ({ instance }: { instance: string }) => { const router = useRouter() const { module } = router.query const moduleDefault = module?.toString() ?? 'erc721' - const { account } = useEthereum() - + const { tablet } = MediaQuery.useContainer() return ( @@ -19,10 +32,10 @@ export const Instance = ({ instance }: { instance: string }) => { {/* @ts-ignore */} {SmartModules[moduleDefault].title} -  Tenant Contract +  {tablet && "Tenant "}Contract
-

{instance}

+

{tablet ? instance : shortenHash(instance, 4,4)}

+ + + + +

Initialize Collection

+ +
+ {isLoading ? ( + + + + ) : ( + + setPrice(e.target.valueAsNumber)}/> + setMaxSupply(e.target.valueAsNumber)} /> + setMaxPerUser(e.target.valueAsNumber)}/> + once you initialize your contract as a
collection, you cannot revert back
+ +
+ )} +
+ + + + + ) +} + +export const InstanceContainer = styled('div', { + display: 'flex', + alignItems: 'center', + background: '$blue200', + borderRadius: 14, + padding: 20, + boxShadow: '2px 2px 2px #342F4E', + width: 'calc(100% - 50px)', + flexDirection: 'row', + justifyContent: 'space-between', +}) + +const Info = styled('div', { + display: 'flex', + flexDirection: 'row', +}) + +const Name = styled('h2', { + fontFamily: '$mono', + fontWeight: '400', + fontSize: 14, +}) + +const Description = styled('p', { + fontSize: 12, + margin: 'auto 12px', +}) + +export const Button = styled(motion.button, { + fontFamily: '$mono', + color: '$white100', + border: 'none', + padding: '10px 16px', + background: 'linear-gradient(93deg, #8CC760 0%, #3898FF 100%)', + boxShadow: '2px 4px 12px rgba(140, 199, 96, 0.15)', + borderRadius: '14px', + cursor: 'pointer', + minWidth: 160, +}) + +const overlayShow = keyframes({ + '0%': { opacity: 0 }, + '100%': { opacity: 1 }, +}) + +const contentShow = keyframes({ + '0%': { opacity: 0, transform: 'translate(-50%, -48%) scale(.96)' }, + '100%': { opacity: 1, transform: 'translate(-50%, -50%) scale(1)' }, +}) + +const StyledOverlay = styled(Overlay, { + backgroundColor: 'rgba(0, 0, 0, 0.5)', + position: 'fixed', + inset: 0, + '@media (prefers-reduced-motion: no-preference)': { + animation: `${overlayShow} 150ms cubic-bezier(0.16, 1, 0.3, 1) forwards`, + }, +}) + +const StyledContent = styled(DialogContent, { + backgroundColor: '$blue300', + borderRadius: 6, + boxShadow: 'hsl(206 22% 7% / 35%) 0px 10px 38px -10px, hsl(206 22% 7% / 20%) 0px 10px 20px -15px', + position: 'fixed', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + minWidth: 250, + maxWidth: '450px', + maxHeight: '85vh', + padding: 25, + '@media (prefers-reduced-motion: no-preference)': { + animation: `${contentShow} 150ms cubic-bezier(0.16, 1, 0.3, 1) forwards`, + }, + '&:focus': { outline: 'none' }, +}) + +const DialogClose = styled(Close, { + display: 'flex', + width: '100%', + justifyContent: 'space-between', + background: 'transparent', + border: 'none', + outline: 'none', + cursor: 'pointer', + h2: { + fontFamily: '$mono', + fontWeight: '400', + fontSize: 14, + color: '$white100', + }, + svg: { + width: '12px', + }, +}) + +const Input = styled('input', { + position: 'relative', + border: 'none', + outline: 'none', + padding: '18px 16px', + background: '$white100', + borderRadius: '8px', + cursor: 'pointer', + width: '90%', + marginBottom: '10px', + fontFamily: '$mono', + fontWeight: '400', + + '&:last-child': { + marginBottom: 0, + }, +}) + +const InputContainer = styled('div', { + position: 'relative', + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between', + marginTop: 18, +}) + + +const Warning = styled('div', { + display: 'flex', + textAlign: 'center', + color: 'red', + fontSize: 12, + marginBottom: 10, +}) \ No newline at end of file diff --git a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/CreateInstance.tsx b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/CreateInstance.tsx index c32c4c57..25592331 100644 --- a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/CreateInstance.tsx +++ b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/CreateInstance.tsx @@ -37,7 +37,6 @@ export const CreateInstance = ({ createInstanceFn, txnLoading }: ReadFunctionPro const [test, setTest] = useState({}) - console.log(txnLoading); const createNewInstance = async () => { try { const orderedArgs = Object.assign( @@ -56,9 +55,8 @@ export const CreateInstance = ({ createInstanceFn, txnLoading }: ReadFunctionPro throw error } } - // Check Discordc - console.log() + return ( diff --git a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx index 3d1ba87a..ea1d56d1 100644 --- a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx +++ b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx @@ -1,5 +1,4 @@ import { styled } from '../../../../stitches.config' -import { CreateInstance } from './CreateInstance' import { ScrollArea, ViewportStyled, ScrollbarStyled, ThumbStyled } from './ModuleStyles' import { getHighlighter, setCDN } from 'shiki' import { useEthereum } from '@decentology/hyperverse-ethereum' @@ -9,6 +8,9 @@ import { MODULES } from '../../../consts' import React from 'react' import { Skeleton } from '../../basics/Skeleton' import { Instance } from './Instance' +import { CreateInstance } from './CreateInstance' +import { InitializeCollection } from '../erc721/InitializeCollection' + setCDN('https://unpkg.com/shiki/') @@ -73,6 +75,8 @@ export const Dashboard = ({ module, instance, isLoading, createInstance, txnLoad <> {/* */} + Set up collection + Get Started

Install Dependencies

diff --git a/packages/hyperverse-evm-erc721/source/erc721Library.ts b/packages/hyperverse-evm-erc721/source/erc721Library.ts index 8cc59923..e81a9ce4 100644 --- a/packages/hyperverse-evm-erc721/source/erc721Library.ts +++ b/packages/hyperverse-evm-erc721/source/erc721Library.ts @@ -32,10 +32,10 @@ export async function ERC721LibraryInternal( providerOrSigner ); - const initializeCollection = async (price: number, maxSupply: number, maxPerUser: number) => { + const initializeCollection = async ({price, maxSupply, maxPerUser}: {price: number; maxSupply: number; maxPerUser: number}) => { try { const tnx = await base.proxyContract?.initializeCollection( - price, + ethers.utils.parseEther(price.toString()), maxSupply, maxPerUser ); From 6d1112e4bc40be0fda2af9867e6803b2b56e5fd2 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Sun, 19 Jun 2022 20:37:56 -0400 Subject: [PATCH 17/20] add back side tab for now --- .../ethereum/eth-hyperverse/src/components/Playground/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ethereum/eth-hyperverse/src/components/Playground/index.tsx b/apps/ethereum/eth-hyperverse/src/components/Playground/index.tsx index 0495f017..dac253d7 100644 --- a/apps/ethereum/eth-hyperverse/src/components/Playground/index.tsx +++ b/apps/ethereum/eth-hyperverse/src/components/Playground/index.tsx @@ -8,7 +8,7 @@ export const Playground = () => { return ( <> - {/* */} + {/* Forces dynamic route pages to remount when changing route */} From 844f215214ef12666b35b545dc889c3a453ea130 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Sun, 19 Jun 2022 21:09:01 -0400 Subject: [PATCH 18/20] code snippets --- .../contracts/ERC721.sol | 4 ---- .../source/erc721Library.ts | 19 ------------------- 2 files changed, 23 deletions(-) diff --git a/packages/hyperverse-evm-erc721/contracts/ERC721.sol b/packages/hyperverse-evm-erc721/contracts/ERC721.sol index 8864c77f..58020dbb 100644 --- a/packages/hyperverse-evm-erc721/contracts/ERC721.sol +++ b/packages/hyperverse-evm-erc721/contracts/ERC721.sol @@ -116,10 +116,6 @@ contract ERC721 is revert MaxPerUserExceeded(); } } else { - if (isPublicSaleActive == false) { - revert PublicMintInactive(); - } - if (isPublicSaleActive == false) { revert PublicMintInactive(); } diff --git a/packages/hyperverse-evm-erc721/source/erc721Library.ts b/packages/hyperverse-evm-erc721/source/erc721Library.ts index e81a9ce4..00677aa9 100644 --- a/packages/hyperverse-evm-erc721/source/erc721Library.ts +++ b/packages/hyperverse-evm-erc721/source/erc721Library.ts @@ -97,14 +97,6 @@ export async function ERC721LibraryInternal( } }; - const setMintPrice = async (price: number) => { - try { - const setMintPriceTxn = await base.proxyContract?.setMintPrice(price); - return setMintPriceTxn.wait() as TransactionReceipt; - } catch (error) { - throw error; - } - }; const setBaseURI = async (baseURI: string) => { try { @@ -124,15 +116,6 @@ export async function ERC721LibraryInternal( } }; - const setPublicSale = async (publicSale: boolean) => { - try { - const setPublicSalesTxn = await base.proxyContract?.setPublicSales(publicSale); - return setPublicSalesTxn.wait() as TransactionReceipt; - } catch (error) { - throw error; - } - }; - const withdraw = async () => { try { const withdrawTxn = await base.proxyContract?.withdraw(); @@ -217,9 +200,7 @@ export async function ERC721LibraryInternal( setMintPermissions, tenantMint, getBaseURI, - setMintPrice, setBaseURI, - setPublicSale, withdraw, tokenURI, getBalanceOf, From 2ad131e589108a1c0903e0322a084ff90cd9c0a7 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Sun, 19 Jun 2022 21:10:49 -0400 Subject: [PATCH 19/20] code snippets --- .../src/components/Modules/ERC721.tsx | 28 ++++++++++- .../components/Modules/shared/Dashboard.tsx | 2 +- apps/ethereum/eth-hyperverse/src/consts.ts | 47 ++++++++++++------- 3 files changed, 57 insertions(+), 20 deletions(-) diff --git a/apps/ethereum/eth-hyperverse/src/components/Modules/ERC721.tsx b/apps/ethereum/eth-hyperverse/src/components/Modules/ERC721.tsx index 9d84814c..374dd7f2 100644 --- a/apps/ethereum/eth-hyperverse/src/components/Modules/ERC721.tsx +++ b/apps/ethereum/eth-hyperverse/src/components/Modules/ERC721.tsx @@ -19,6 +19,7 @@ import { ERC721CodeSnippets } from '../../consts' import { CodeContainer, SubHeader, DEFAULT_THEME, Code } from './shared/Dashboard' import { useMutation, useQuery } from 'react-query' +import { styled } from '../../../stitches.config' export const ERC721 = () => { const [activeTab, setActiveTab] = React.useState(ModuleTabs.DASHBOARD) @@ -71,8 +72,10 @@ export const ERC721 = () => { {ERC721CodeSnippets.ownerFunctions.map((snippet) => { return ( - + +

{snippet.name}

+ {snippet?.description}
{snippet.snippet && ( )} @@ -92,8 +95,10 @@ export const ERC721 = () => { {ERC721CodeSnippets.publicFunctions.map((snippet) => { return ( - + +

{snippet.name}

+ {snippet?.description}
{snippet.snippet && ( )} @@ -118,3 +123,22 @@ export const ERC721 = () => { ) } + +const Info = styled('div', { + display: 'flex', + flexDirection: 'column', + alignItems: 'baseline', + fontSize: '12px', + + h3: { + fontSize: '15px', + fontFamily: `$mono`, + margin: '0 24px 0 0', + }, + + marginBottom: '10px', + + '@laptop': { + flexDirection: 'row', + } +}) \ No newline at end of file diff --git a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx index ea1d56d1..5cdf0f8a 100644 --- a/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx +++ b/apps/ethereum/eth-hyperverse/src/components/Modules/shared/Dashboard.tsx @@ -14,7 +14,7 @@ import { InitializeCollection } from '../erc721/InitializeCollection' setCDN('https://unpkg.com/shiki/') -export const DEFAULT_LANG = 'jsx' +export const DEFAULT_LANG = 'tsx' export const DEFAULT_THEME = 'material-darker' diff --git a/apps/ethereum/eth-hyperverse/src/consts.ts b/apps/ethereum/eth-hyperverse/src/consts.ts index 190420ff..10250660 100644 --- a/apps/ethereum/eth-hyperverse/src/consts.ts +++ b/apps/ethereum/eth-hyperverse/src/consts.ts @@ -81,60 +81,73 @@ export const ERC721CodeSnippets = ownerFunctions: [ { name: 'tenant mint', - description: 'mint a new token', - snippet : `const tenantMint = erc721.tenantMint!({to: address , image: File})` + description: 'mint a new token, an image is optional', + snippet : `const tenantMint = erc721.tenantMint({address: string , image?: File})` }, { - name: 'withdraw', - snippet : `const tenantMint = erc721.tenantMint!({to: address , image: File})` - - + name: 'initialize collection', + description: 'for nft collections, this function will allow you to set the price, max supply, and max per user', + snippet : `const initializeCollection = erc721.tenantMint({price: number, maxSupply: number, maxPerUser: number})` }, { - name: 'setPublicSale', - snippet : `const tenantMint = erc721.tenantMint!({to: address , image: File})` + name: 'setMintPermissions', + description: 'toggle mint permission to public or only owner', + snippet : `const setMint = erc721.setMintPermissions(true)` }, - - { - name: 'setMintPrice', - snippet : `const tenantMint = erc721.tenantMint!({to: address , image: File})` - }, { name: 'setBaseURI', - snippet : `const tenantMint = erc721.tenantMint!({to: address , image: File})` + description: 'set the base URI for the collection', + snippet : `const tenantMint = erc721.setBaseURI(baseURI)` }, { - name: 'togglePublicMint', - snippet : `const tenantMint = erc721.tenantMint!({to: address , image: File})` + name: 'withdraw', + description: 'withdraw any ethereum stored in the contract', + snippet : `const tenantMint = erc721.withdraw()` }, ], publicFunctions: [ { name: 'mint', - snippet : `const tenantMint = erc721.tenantMint!({to: address , image: File})` + description: 'mint a new token', + snippet : `const mint = erc721.mint({address: string , amount?: number})` }, { name: 'getBaseURI', + description: 'get the base URI for the collection', + snippet : `const baseURI = erc721.getBaseURI()` }, { name: 'tokenURI', + description: 'get the token URI for a token', + snippet : `const tokenURI = erc721.tokenURI(tokenId)` }, { name: 'getBalanceOf', + description: 'get the balance of a user', + snippet : `const balance = erc721.getBalanceOf(address)` + }, { name: 'getOwnerOf', + description: 'get the owner of a token', + snippet : `const owner = erc721.getOwnerOf(tokenId)` }, { name: 'transfer', + description: 'transfer a token to another user', + snippet : `const transfer = erc721.transfer({from: string , to: string, tokenId: number})` }, { name: 'approve', + description: 'approve a user to transfer a token', + snippet : `const approve = erc721.approve({to: string, tokenId: number})` }, { name: 'setApprovalForAll', + description: 'approve an operator for the caller, allows operator to tranfer caller\'s tokens', + snippet : `const setApprovalForAll = erc721.setApprovalForAll({operator: string, approved: boolean})` } ] From 999d749238e93e8439b10c93c78e18dfc8f3a2e0 Mon Sep 17 00:00:00 2001 From: Angelica Turla Date: Mon, 20 Jun 2022 16:39:55 -0400 Subject: [PATCH 20/20] updates --- .../artifacts/contracts/ERC721.sol/ERC721.json | 17 ++--------------- .../ERC721Factory.sol/ERC721Factory.json | 4 ++-- packages/hyperverse-evm-erc721/contracts.json | 4 ++-- .../hyperverse-evm-erc721/contracts/ERC721.sol | 6 +++--- .../hyperverse-evm-erc721/test/sample-test.js | 11 +++++++++++ 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json index 743b142d..fa642bbe 100644 --- a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json +++ b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721.sol/ERC721.json @@ -370,19 +370,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "isPublicSaleActive", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "metadata", @@ -736,8 +723,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b50604051620045f8380380620045f883398181016040528101906200003791906200040c565b60016000819055506040518060a001604052806040518060400160405280600681526020017f4552433732310000000000000000000000000000000000000000000000000000815250815260200160405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c6c696e6b2e6e6574000000000000000081525081525081526020016040518060400160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250815260200165032a361e860667ffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c4c696e6b2e6e657400000000000000008152508152506002600082015181600001908051906020019062000194929190620002b4565b5060208201518160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906200020392919062000345565b505050604082015181600301908051906020019062000224929190620002b4565b5060608201518160040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550608082015181600501908051906020019062000272929190620002b4565b509050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050620004eb565b828054620002c2906200046c565b90600052602060002090601f016020900481019282620002e6576000855562000332565b82601f106200030157805160ff191683800117855562000332565b8280016001018555821562000332579182015b828111156200033157825182559160200191906001019062000314565b5b509050620003419190620003d6565b5090565b82805462000353906200046c565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b6000815190506200040681620004d1565b92915050565b6000602082840312156200041f57600080fd5b60006200042f84828501620003f5565b91505092915050565b600062000445826200044c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048557607f821691505b602082108114156200049c576200049b620004a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620004dc8162000438565b8114620004e857600080fd5b50565b60805160601c6140ee6200050a60003960006120fe01526140ee6000f3fe6080604052600436106101c25760003560e01c806342842e0e116100f7578063714c539811610095578063b88d4fde11610064578063b88d4fde14610651578063c87b56dd1461067a578063ce606ee0146106b7578063e985e9c5146106e2576101c2565b8063714c5398146105a457806395d89b41146105cf57806397ee73bb146105fa578063a22cb46514610628576101c2565b806355f804b3116100d157806355f804b3146104d15780636352211e146104fa5780636a6278421461053757806370a0823114610567576101c2565b806342842e0e1461045657806349df728c1461047f5780634d2f929a146104a8576101c2565b8063217cc2b41161016457806327fbceac1161013e57806327fbceac146103aa578063392f37e9146103e75780633ccfd60b146104165780633e2b81c41461042d576101c2565b8063217cc2b41461031457806323b872dd14610351578063248b71fc1461037a576101c2565b8063081812fc116101a0578063081812fc14610258578063095ea7b3146102955780630b8eb2cf146102be5780631e84c413146102e9576101c2565b806301ffc9a7146101c757806306fdde0314610204578063077f224a1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906134a8565b61071f565b6040516101fb9190613998565b60405180910390f35b34801561021057600080fd5b50610219610801565b6040516102269190613a3d565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190613564565b610893565b005b34801561026457600080fd5b5061027f600480360381019061027a91906135e3565b610a1a565b60405161028c91906138e6565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b7919061341a565b610a60565b005b3480156102ca57600080fd5b506102d3610b69565b6040516102e091906138e6565b60405180910390f35b3480156102f557600080fd5b506102fe610b8f565b60405161030b9190613998565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613257565b610ba2565b6040516103489190613a9f565b60405180910390f35b34801561035d57600080fd5b50610378600480360381019061037391906132bc565b610c98565b005b610394600480360381019061038f919061341a565b610cef565b6040516103a19190613976565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc91906133c2565b611155565b6040516103de9190613a9f565b60405180910390f35b3480156103f357600080fd5b506103fc61122f565b60405161040d9594939291906139b3565b60405180910390f35b34801561042257600080fd5b5061042b6114f1565b005b34801561043957600080fd5b50610454600480360381019061044f9190613456565b6115c7565b005b34801561046257600080fd5b5061047d600480360381019061047891906132bc565b6116aa565b005b34801561048b57600080fd5b506104a660048036038101906104a191906134fa565b6116ca565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190613635565b611870565b005b3480156104dd57600080fd5b506104f860048036038101906104f39190613523565b611935565b005b34801561050657600080fd5b50610521600480360381019061051c91906135e3565b6119d6565b60405161052e91906138e6565b60405180910390f35b610551600480360381019061054c9190613257565b611a7f565b60405161055e9190613a9f565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190613257565b611d32565b60405161059b9190613a9f565b60405180910390f35b3480156105b057600080fd5b506105b9611de1565b6040516105c69190613a3d565b60405180910390f35b3480156105db57600080fd5b506105e4611e73565b6040516105f19190613a3d565b60405180910390f35b34801561060657600080fd5b5061060f611f05565b60405161061f9493929190613aba565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613386565b611f30565b005b34801561065d57600080fd5b506106786004803603810190610673919061330b565b611f46565b005b34801561068657600080fd5b506106a1600480360381019061069c91906135e3565b611f9f565b6040516106ae9190613a3d565b60405180910390f35b3480156106c357600080fd5b506106cc6120fc565b6040516106d991906138e6565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613280565b612120565b6040516107169190613998565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107fa57506107f9826121b4565b5b9050919050565b6060600b805461081090613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90613e23565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b5050505050905090565b600061089f600161221e565b905080156108c25760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461094b576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b9080519060200190610961929190612f6c565b5083600c9080519060200190610978929190612f6c565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508015610a145760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610a0b9190613a22565b60405180910390a15b50505050565b6000610a2582612310565b6015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6b826119d6565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ad3576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610af2612352565b73ffffffffffffffffffffffffffffffffffffffff16141580610b235750610b2181610b1c612352565b612120565b155b15610b5a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b64838361235a565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600e60019054906101000a900460ff1615151415610c79576040517fdbc28d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c83612413565b9050610c8f838261242e565b80915050919050565b610ca9610ca3612352565b8261244c565b610cdf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cea8383836124e1565b505050565b606060026000541415610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90613a7f565b60405180910390fd5b60026000819055508160011515600e60019054906101000a900460ff1615151415610ec35760001515600f60030160009054906101000a900460ff1615151415610dad576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f60010154610dbd600a612736565b1180610de15750600f6001015481610dd5600a612736565b610ddf9190613c13565b115b15610e18576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60000154610e299190613c9a565b8134610e359190613c9a565b14610e6c576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f6002015481610e7c33611d32565b610e869190613c13565b1115610ebe576040517fecdd05c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611053565b60001515600e60009054906101000a900460ff1615151415610f11576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600e60009054906101000a900460ff1615151415610f5f576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115610fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610fcf5781602001602082028036833780820191505090505b50905060005b8481101561104d576000610fe7612413565b905080838381518110611023577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050611039878261242e565b50808061104590613e86565b915050610fd5565b50809250505b60008367ffffffffffffffff811115611095577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156110c35781602001602082028036833780820191505090505b50905060005b848110156111415760006110db612413565b905080838381518110611117577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505061112d878261242e565b50808061113990613e86565b9150506110c9565b508092505050600160008190555092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111de576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e8612413565b90506111f4858261242e565b6000848490501115611224578383601760008481526020019081526020016000209190611222929190612ff2565b505b809150509392505050565b600280600001805461124090613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461126c90613e23565b80156112b95780601f1061128e576101008083540402835291602001916112b9565b820191906000526020600020905b81548152906001019060200180831161129c57829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461133490613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461136090613e23565b80156113ad5780601f10611382576101008083540402835291602001916113ad565b820191906000526020600020905b81548152906001019060200180831161139057829003601f168201915b505050505081525050908060030180546113c690613e23565b80601f01602080910402602001604051908101604052809291908181526020018280546113f290613e23565b801561143f5780601f106114145761010080835404028352916020019161143f565b820191906000526020600020905b81548152906001019060200180831161142257829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff169080600501805461146e90613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461149a90613e23565b80156114e75780601f106114bc576101008083540402835291602001916114e7565b820191906000526020600020905b8154815290600101906020018083116114ca57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611578576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115c3573d6000803e3d6000fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60011515600e60019054906101000a900460ff161515141561168c5780600f60030160006101000a81548160ff0219169083151502179055506116a7565b80600e60006101000a81548160ff0219169083151502179055505b50565b6116c583838360405180602001604052806000815250611f46565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611751576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161178c91906138e6565b60206040518083038186803b1580156117a457600080fd5b505afa1580156117b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dc919061360c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161181992919061394d565b602060405180830381600087803b15801561183357600080fd5b505af1158015611847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186b919061347f565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600f6000018190555081600f6001018190555080600f600201819055506001600e60016101000a81548160ff021916908315150217905550505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119bc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90805190602001906119d2929190612f6c565b5050565b6000806013600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a76576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90613a7f565b60405180910390fd5b60026000819055506001801515600e60019054906101000a900460ff1615151415611c535760001515600f60030160009054906101000a900460ff1615151415611b3d576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f60010154611b4d600a612736565b1180611b715750600f6001015481611b65600a612736565b611b6f9190613c13565b115b15611ba8576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60000154611bb99190613c9a565b8134611bc59190613c9a565b14611bfc576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f6002015481611c0c33611d32565b611c169190613c13565b1115611c4e576040517fecdd05c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d0a565b60001515600e60009054906101000a900460ff1615151415611ca1576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600e60009054906101000a900460ff1615151415611cef576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611cf9612413565b9050611d05848261242e565b809250505b6000611d14612413565b9050611d20848261242e565b80925050506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d8054611df090613e23565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1c90613e23565b8015611e695780601f10611e3e57610100808354040283529160200191611e69565b820191906000526020600020905b815481529060010190602001808311611e4c57829003601f168201915b5050505050905090565b6060600c8054611e8290613e23565b80601f0160208091040260200160405190810160405280929190818152602001828054611eae90613e23565b8015611efb5780601f10611ed057610100808354040283529160200191611efb565b820191906000526020600020905b815481529060010190602001808311611ede57829003601f168201915b5050505050905090565b600f8060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b611f42611f3b612352565b8383612744565b5050565b611f57611f51612352565b8361244c565b611f8d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f998484848461290f565b50505050565b6060611faa82612310565b600e60019054906101000a900460ff1661209e576000601760008481526020019081526020016000208054611fde90613e23565b905011611ffa5760405180602001604052806000815250612097565b60176000838152602001908152602001600020805461201890613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461204490613e23565b80156120915780601f1061206657610100808354040283529160200191612091565b820191906000526020600020905b81548152906001019060200180831161207457829003601f168201915b50505050505b90506120f7565b60006120a8612962565b905060008151116120c857604051806020016040528060008152506120f3565b806120d284612979565b6040516020016120e39291906138c2565b6040516020818303038152906040525b9150505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156122945760018260ff1614801561224c575061224a30612b26565b155b61228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613a5f565b60405180910390fd5b6000905061230b565b8160ff16600160009054906101000a900460ff1660ff16106122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290613a5f565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b61231981612b39565b61234f576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816015600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123cd836119d6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061241f600a612ba5565b612429600a612736565b905090565b612448828260405180602001604052806000815250612bbb565b5050565b600080612458836119d6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061249a57506124998185612120565b5b806124d857508373ffffffffffffffffffffffffffffffffffffffff166124c084610a1a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612501826119d6565b73ffffffffffffffffffffffffffffffffffffffff161461254e576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125c0838383612c0d565b6125cb60008261235a565b6001601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261b9190613cf4565b925050819055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126729190613c13565b92505081905550816013600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612731838383612c12565b505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612811576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129029190613998565b60405180910390a3505050565b61291a8484846124e1565b61292684848484612c17565b61295c576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008214156129c1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b21565b600082905060005b600082146129f35780806129dc90613e86565b915050600a826129ec9190613c69565b91506129c9565b60008167ffffffffffffffff811115612a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a675781602001600182028036833780820191505090505b5090505b60008514612b1a57600182612a809190613cf4565b9150600a85612a8f9190613ecf565b6030612a9b9190613c13565b60f81b818381518110612ad7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b139190613c69565b9450612a6b565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b612bc58383612da5565b612bd26000848484612c17565b612c08576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b6000612c388473ffffffffffffffffffffffffffffffffffffffff16612b26565b15612d98578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c61612352565b8786866040518563ffffffff1660e01b8152600401612c839493929190613901565b602060405180830381600087803b158015612c9d57600080fd5b505af1925050508015612cce57506040513d601f19601f82011682018060405250810190612ccb91906134d1565b60015b612d48573d8060008114612cfe576040519150601f19603f3d011682016040523d82523d6000602084013e612d03565b606091505b50600081511415612d40576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d9d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e1581612b39565b15612e4b576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e5760008383612c0d565b6001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ea79190613c13565b92505081905550816013600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f6860008383612c12565b5050565b828054612f7890613e23565b90600052602060002090601f016020900481019282612f9a5760008555612fe1565b82601f10612fb357805160ff1916838001178555612fe1565b82800160010185558215612fe1579182015b82811115612fe0578251825591602001919060010190612fc5565b5b509050612fee9190613078565b5090565b828054612ffe90613e23565b90600052602060002090601f0160209004810192826130205760008555613067565b82601f1061303957803560ff1916838001178555613067565b82800160010185558215613067579182015b8281111561306657823582559160200191906001019061304b565b5b5090506130749190613078565b5090565b5b80821115613091576000816000905550600101613079565b5090565b60006130a86130a384613b24565b613aff565b9050828152602081018484840111156130c057600080fd5b6130cb848285613de1565b509392505050565b60006130e66130e184613b55565b613aff565b9050828152602081018484840111156130fe57600080fd5b613109848285613de1565b509392505050565b60008135905061312081614045565b92915050565b6000813590506131358161405c565b92915050565b60008151905061314a8161405c565b92915050565b60008135905061315f81614073565b92915050565b60008151905061317481614073565b92915050565b600082601f83011261318b57600080fd5b813561319b848260208601613095565b91505092915050565b6000813590506131b38161408a565b92915050565b60008083601f8401126131cb57600080fd5b8235905067ffffffffffffffff8111156131e457600080fd5b6020830191508360018202830111156131fc57600080fd5b9250929050565b600082601f83011261321457600080fd5b81356132248482602086016130d3565b91505092915050565b60008135905061323c816140a1565b92915050565b600081519050613251816140a1565b92915050565b60006020828403121561326957600080fd5b600061327784828501613111565b91505092915050565b6000806040838503121561329357600080fd5b60006132a185828601613111565b92505060206132b285828601613111565b9150509250929050565b6000806000606084860312156132d157600080fd5b60006132df86828701613111565b93505060206132f086828701613111565b92505060406133018682870161322d565b9150509250925092565b6000806000806080858703121561332157600080fd5b600061332f87828801613111565b945050602061334087828801613111565b93505060406133518782880161322d565b925050606085013567ffffffffffffffff81111561336e57600080fd5b61337a8782880161317a565b91505092959194509250565b6000806040838503121561339957600080fd5b60006133a785828601613111565b92505060206133b885828601613126565b9150509250929050565b6000806000604084860312156133d757600080fd5b60006133e586828701613111565b935050602084013567ffffffffffffffff81111561340257600080fd5b61340e868287016131b9565b92509250509250925092565b6000806040838503121561342d57600080fd5b600061343b85828601613111565b925050602061344c8582860161322d565b9150509250929050565b60006020828403121561346857600080fd5b600061347684828501613126565b91505092915050565b60006020828403121561349157600080fd5b600061349f8482850161313b565b91505092915050565b6000602082840312156134ba57600080fd5b60006134c884828501613150565b91505092915050565b6000602082840312156134e357600080fd5b60006134f184828501613165565b91505092915050565b60006020828403121561350c57600080fd5b600061351a848285016131a4565b91505092915050565b60006020828403121561353557600080fd5b600082013567ffffffffffffffff81111561354f57600080fd5b61355b84828501613203565b91505092915050565b60008060006060848603121561357957600080fd5b600084013567ffffffffffffffff81111561359357600080fd5b61359f86828701613203565b935050602084013567ffffffffffffffff8111156135bc57600080fd5b6135c886828701613203565b92505060406135d986828701613111565b9150509250925092565b6000602082840312156135f557600080fd5b60006136038482850161322d565b91505092915050565b60006020828403121561361e57600080fd5b600061362c84828501613242565b91505092915050565b60008060006060848603121561364a57600080fd5b60006136588682870161322d565b93505060206136698682870161322d565b925050604061367a8682870161322d565b9150509250925092565b60006136908383613895565b60208301905092915050565b6136a581613d28565b82525050565b6136b481613d28565b82525050565b60006136c582613b96565b6136cf8185613bc4565b93506136da83613b86565b8060005b8381101561370b5781516136f28882613684565b97506136fd83613bb7565b9250506001810190506136de565b5085935050505092915050565b61372181613d3a565b82525050565b600061373282613ba1565b61373c8185613bd5565b935061374c818560208601613df0565b61375581613fbc565b840191505092915050565b61376981613dcf565b82525050565b600061377a82613bac565b6137848185613be6565b9350613794818560208601613df0565b61379d81613fbc565b840191505092915050565b60006137b382613bac565b6137bd8185613bf7565b93506137cd818560208601613df0565b6137d681613fbc565b840191505092915050565b60006137ec82613bac565b6137f68185613c08565b9350613806818560208601613df0565b80840191505092915050565b600061381f602e83613bf7565b915061382a82613fcd565b604082019050919050565b6000613842601f83613bf7565b915061384d8261401c565b602082019050919050565b6000604083016000830151613870600086018261369c565b5060208301518482036020860152613888828261376f565b9150508091505092915050565b61389e81613da4565b82525050565b6138ad81613da4565b82525050565b6138bc81613dae565b82525050565b60006138ce82856137e1565b91506138da82846137e1565b91508190509392505050565b60006020820190506138fb60008301846136ab565b92915050565b600060808201905061391660008301876136ab565b61392360208301866136ab565b61393060408301856138a4565b81810360608301526139428184613727565b905095945050505050565b600060408201905061396260008301856136ab565b61396f60208301846138a4565b9392505050565b6000602082019050818103600083015261399081846136ba565b905092915050565b60006020820190506139ad6000830184613718565b92915050565b600060a08201905081810360008301526139cd8188613727565b905081810360208301526139e18187613858565b905081810360408301526139f58186613727565b9050613a0460608301856138b3565b8181036080830152613a168184613727565b90509695505050505050565b6000602082019050613a376000830184613760565b92915050565b60006020820190508181036000830152613a5781846137a8565b905092915050565b60006020820190508181036000830152613a7881613812565b9050919050565b60006020820190508181036000830152613a9881613835565b9050919050565b6000602082019050613ab460008301846138a4565b92915050565b6000608082019050613acf60008301876138a4565b613adc60208301866138a4565b613ae960408301856138a4565b613af66060830184613718565b95945050505050565b6000613b09613b1a565b9050613b158282613e55565b919050565b6000604051905090565b600067ffffffffffffffff821115613b3f57613b3e613f8d565b5b613b4882613fbc565b9050602081019050919050565b600067ffffffffffffffff821115613b7057613b6f613f8d565b5b613b7982613fbc565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613c1e82613da4565b9150613c2983613da4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c5e57613c5d613f00565b5b828201905092915050565b6000613c7482613da4565b9150613c7f83613da4565b925082613c8f57613c8e613f2f565b5b828204905092915050565b6000613ca582613da4565b9150613cb083613da4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ce957613ce8613f00565b5b828202905092915050565b6000613cff82613da4565b9150613d0a83613da4565b925082821015613d1d57613d1c613f00565b5b828203905092915050565b6000613d3382613d84565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613d7d82613d28565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b6000613dda82613dc2565b9050919050565b82818337600083830152505050565b60005b83811015613e0e578082015181840152602081019050613df3565b83811115613e1d576000848401525b50505050565b60006002820490506001821680613e3b57607f821691505b60208210811415613e4f57613e4e613f5e565b5b50919050565b613e5e82613fbc565b810181811067ffffffffffffffff82111715613e7d57613e7c613f8d565b5b80604052505050565b6000613e9182613da4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ec457613ec3613f00565b5b600182019050919050565b6000613eda82613da4565b9150613ee583613da4565b925082613ef557613ef4613f2f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61404e81613d28565b811461405957600080fd5b50565b61406581613d3a565b811461407057600080fd5b50565b61407c81613d46565b811461408757600080fd5b50565b61409381613d72565b811461409e57600080fd5b50565b6140aa81613da4565b81146140b557600080fd5b5056fea2646970667358221220a9d22b57a47f4d7a62196906ac4ad0318a833205bb8c6589d2a259112e1ddf4c64736f6c63430008040033", - "deployedBytecode": "0x6080604052600436106101c25760003560e01c806342842e0e116100f7578063714c539811610095578063b88d4fde11610064578063b88d4fde14610651578063c87b56dd1461067a578063ce606ee0146106b7578063e985e9c5146106e2576101c2565b8063714c5398146105a457806395d89b41146105cf57806397ee73bb146105fa578063a22cb46514610628576101c2565b806355f804b3116100d157806355f804b3146104d15780636352211e146104fa5780636a6278421461053757806370a0823114610567576101c2565b806342842e0e1461045657806349df728c1461047f5780634d2f929a146104a8576101c2565b8063217cc2b41161016457806327fbceac1161013e57806327fbceac146103aa578063392f37e9146103e75780633ccfd60b146104165780633e2b81c41461042d576101c2565b8063217cc2b41461031457806323b872dd14610351578063248b71fc1461037a576101c2565b8063081812fc116101a0578063081812fc14610258578063095ea7b3146102955780630b8eb2cf146102be5780631e84c413146102e9576101c2565b806301ffc9a7146101c757806306fdde0314610204578063077f224a1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e991906134a8565b61071f565b6040516101fb9190613998565b60405180910390f35b34801561021057600080fd5b50610219610801565b6040516102269190613a3d565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190613564565b610893565b005b34801561026457600080fd5b5061027f600480360381019061027a91906135e3565b610a1a565b60405161028c91906138e6565b60405180910390f35b3480156102a157600080fd5b506102bc60048036038101906102b7919061341a565b610a60565b005b3480156102ca57600080fd5b506102d3610b69565b6040516102e091906138e6565b60405180910390f35b3480156102f557600080fd5b506102fe610b8f565b60405161030b9190613998565b60405180910390f35b34801561032057600080fd5b5061033b60048036038101906103369190613257565b610ba2565b6040516103489190613a9f565b60405180910390f35b34801561035d57600080fd5b50610378600480360381019061037391906132bc565b610c98565b005b610394600480360381019061038f919061341a565b610cef565b6040516103a19190613976565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc91906133c2565b611155565b6040516103de9190613a9f565b60405180910390f35b3480156103f357600080fd5b506103fc61122f565b60405161040d9594939291906139b3565b60405180910390f35b34801561042257600080fd5b5061042b6114f1565b005b34801561043957600080fd5b50610454600480360381019061044f9190613456565b6115c7565b005b34801561046257600080fd5b5061047d600480360381019061047891906132bc565b6116aa565b005b34801561048b57600080fd5b506104a660048036038101906104a191906134fa565b6116ca565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190613635565b611870565b005b3480156104dd57600080fd5b506104f860048036038101906104f39190613523565b611935565b005b34801561050657600080fd5b50610521600480360381019061051c91906135e3565b6119d6565b60405161052e91906138e6565b60405180910390f35b610551600480360381019061054c9190613257565b611a7f565b60405161055e9190613a9f565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190613257565b611d32565b60405161059b9190613a9f565b60405180910390f35b3480156105b057600080fd5b506105b9611de1565b6040516105c69190613a3d565b60405180910390f35b3480156105db57600080fd5b506105e4611e73565b6040516105f19190613a3d565b60405180910390f35b34801561060657600080fd5b5061060f611f05565b60405161061f9493929190613aba565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613386565b611f30565b005b34801561065d57600080fd5b506106786004803603810190610673919061330b565b611f46565b005b34801561068657600080fd5b506106a1600480360381019061069c91906135e3565b611f9f565b6040516106ae9190613a3d565b60405180910390f35b3480156106c357600080fd5b506106cc6120fc565b6040516106d991906138e6565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613280565b612120565b6040516107169190613998565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ea57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107fa57506107f9826121b4565b5b9050919050565b6060600b805461081090613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461083c90613e23565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b5050505050905090565b600061089f600161221e565b905080156108c25760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461094b576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b9080519060200190610961929190612f6c565b5083600c9080519060200190610978929190612f6c565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508015610a145760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610a0b9190613a22565b60405180910390a15b50505050565b6000610a2582612310565b6015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a6b826119d6565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ad3576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610af2612352565b73ffffffffffffffffffffffffffffffffffffffff16141580610b235750610b2181610b1c612352565b612120565b155b15610b5a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b64838361235a565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c2b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600e60019054906101000a900460ff1615151415610c79576040517fdbc28d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c83612413565b9050610c8f838261242e565b80915050919050565b610ca9610ca3612352565b8261244c565b610cdf576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cea8383836124e1565b505050565b606060026000541415610d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2e90613a7f565b60405180910390fd5b60026000819055508160011515600e60019054906101000a900460ff1615151415610ec35760001515600f60030160009054906101000a900460ff1615151415610dad576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f60010154610dbd600a612736565b1180610de15750600f6001015481610dd5600a612736565b610ddf9190613c13565b115b15610e18576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60000154610e299190613c9a565b8134610e359190613c9a565b14610e6c576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f6002015481610e7c33611d32565b610e869190613c13565b1115610ebe576040517fecdd05c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611053565b60001515600e60009054906101000a900460ff1615151415610f11576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600e60009054906101000a900460ff1615151415610f5f576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008367ffffffffffffffff811115610fa1577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610fcf5781602001602082028036833780820191505090505b50905060005b8481101561104d576000610fe7612413565b905080838381518110611023577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050611039878261242e565b50808061104590613e86565b915050610fd5565b50809250505b60008367ffffffffffffffff811115611095577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156110c35781602001602082028036833780820191505090505b50905060005b848110156111415760006110db612413565b905080838381518110611117577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505061112d878261242e565b50808061113990613e86565b9150506110c9565b508092505050600160008190555092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111de576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111e8612413565b90506111f4858261242e565b6000848490501115611224578383601760008481526020019081526020016000209190611222929190612ff2565b505b809150509392505050565b600280600001805461124090613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461126c90613e23565b80156112b95780601f1061128e576101008083540402835291602001916112b9565b820191906000526020600020905b81548152906001019060200180831161129c57829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461133490613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461136090613e23565b80156113ad5780601f10611382576101008083540402835291602001916113ad565b820191906000526020600020905b81548152906001019060200180831161139057829003601f168201915b505050505081525050908060030180546113c690613e23565b80601f01602080910402602001604051908101604052809291908181526020018280546113f290613e23565b801561143f5780601f106114145761010080835404028352916020019161143f565b820191906000526020600020905b81548152906001019060200180831161142257829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff169080600501805461146e90613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461149a90613e23565b80156114e75780601f106114bc576101008083540402835291602001916114e7565b820191906000526020600020905b8154815290600101906020018083116114ca57829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611578576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115c3573d6000803e3d6000fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461164e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60011515600e60019054906101000a900460ff161515141561168c5780600f60030160006101000a81548160ff0219169083151502179055506116a7565b80600e60006101000a81548160ff0219169083151502179055505b50565b6116c583838360405180602001604052806000815250611f46565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611751576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161178c91906138e6565b60206040518083038186803b1580156117a457600080fd5b505afa1580156117b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dc919061360c565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161181992919061394d565b602060405180830381600087803b15801561183357600080fd5b505af1158015611847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186b919061347f565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118f7576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600f6000018190555081600f6001018190555080600f600201819055506001600e60016101000a81548160ff021916908315150217905550505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119bc576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d90805190602001906119d2929190612f6c565b5050565b6000806013600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a76576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abe90613a7f565b60405180910390fd5b60026000819055506001801515600e60019054906101000a900460ff1615151415611c535760001515600f60030160009054906101000a900460ff1615151415611b3d576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f60010154611b4d600a612736565b1180611b715750600f6001015481611b65600a612736565b611b6f9190613c13565b115b15611ba8576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60000154611bb99190613c9a565b8134611bc59190613c9a565b14611bfc576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f6002015481611c0c33611d32565b611c169190613c13565b1115611c4e576040517fecdd05c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d0a565b60001515600e60009054906101000a900460ff1615151415611ca1576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600e60009054906101000a900460ff1615151415611cef576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611cf9612413565b9050611d05848261242e565b809250505b6000611d14612413565b9050611d20848261242e565b80925050506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9a576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600d8054611df090613e23565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1c90613e23565b8015611e695780601f10611e3e57610100808354040283529160200191611e69565b820191906000526020600020905b815481529060010190602001808311611e4c57829003601f168201915b5050505050905090565b6060600c8054611e8290613e23565b80601f0160208091040260200160405190810160405280929190818152602001828054611eae90613e23565b8015611efb5780601f10611ed057610100808354040283529160200191611efb565b820191906000526020600020905b815481529060010190602001808311611ede57829003601f168201915b5050505050905090565b600f8060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b611f42611f3b612352565b8383612744565b5050565b611f57611f51612352565b8361244c565b611f8d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f998484848461290f565b50505050565b6060611faa82612310565b600e60019054906101000a900460ff1661209e576000601760008481526020019081526020016000208054611fde90613e23565b905011611ffa5760405180602001604052806000815250612097565b60176000838152602001908152602001600020805461201890613e23565b80601f016020809104026020016040519081016040528092919081815260200182805461204490613e23565b80156120915780601f1061206657610100808354040283529160200191612091565b820191906000526020600020905b81548152906001019060200180831161207457829003601f168201915b50505050505b90506120f7565b60006120a8612962565b905060008151116120c857604051806020016040528060008152506120f3565b806120d284612979565b6040516020016120e39291906138c2565b6040516020818303038152906040525b9150505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff16156122945760018260ff1614801561224c575061224a30612b26565b155b61228b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228290613a5f565b60405180910390fd5b6000905061230b565b8160ff16600160009054906101000a900460ff1660ff16106122eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e290613a5f565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b61231981612b39565b61234f576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816015600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123cd836119d6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061241f600a612ba5565b612429600a612736565b905090565b612448828260405180602001604052806000815250612bbb565b5050565b600080612458836119d6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061249a57506124998185612120565b5b806124d857508373ffffffffffffffffffffffffffffffffffffffff166124c084610a1a565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612501826119d6565b73ffffffffffffffffffffffffffffffffffffffff161461254e576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125b5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125c0838383612c0d565b6125cb60008261235a565b6001601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261b9190613cf4565b925050819055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126729190613c13565b92505081905550816013600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612731838383612c12565b505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127ab576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612811576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129029190613998565b60405180910390a3505050565b61291a8484846124e1565b61292684848484612c17565b61295c576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606060405180602001604052806000815250905090565b606060008214156129c1576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b21565b600082905060005b600082146129f35780806129dc90613e86565b915050600a826129ec9190613c69565b91506129c9565b60008167ffffffffffffffff811115612a35577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a675781602001600182028036833780820191505090505b5090505b60008514612b1a57600182612a809190613cf4565b9150600a85612a8f9190613ecf565b6030612a9b9190613c13565b60f81b818381518110612ad7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b139190613c69565b9450612a6b565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b612bc58383612da5565b612bd26000848484612c17565b612c08576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b6000612c388473ffffffffffffffffffffffffffffffffffffffff16612b26565b15612d98578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c61612352565b8786866040518563ffffffff1660e01b8152600401612c839493929190613901565b602060405180830381600087803b158015612c9d57600080fd5b505af1925050508015612cce57506040513d601f19601f82011682018060405250810190612ccb91906134d1565b60015b612d48573d8060008114612cfe576040519150601f19603f3d011682016040523d82523d6000602084013e612d03565b606091505b50600081511415612d40576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d9d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e0c576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e1581612b39565b15612e4b576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e5760008383612c0d565b6001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ea79190613c13565b92505081905550816013600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612f6860008383612c12565b5050565b828054612f7890613e23565b90600052602060002090601f016020900481019282612f9a5760008555612fe1565b82601f10612fb357805160ff1916838001178555612fe1565b82800160010185558215612fe1579182015b82811115612fe0578251825591602001919060010190612fc5565b5b509050612fee9190613078565b5090565b828054612ffe90613e23565b90600052602060002090601f0160209004810192826130205760008555613067565b82601f1061303957803560ff1916838001178555613067565b82800160010185558215613067579182015b8281111561306657823582559160200191906001019061304b565b5b5090506130749190613078565b5090565b5b80821115613091576000816000905550600101613079565b5090565b60006130a86130a384613b24565b613aff565b9050828152602081018484840111156130c057600080fd5b6130cb848285613de1565b509392505050565b60006130e66130e184613b55565b613aff565b9050828152602081018484840111156130fe57600080fd5b613109848285613de1565b509392505050565b60008135905061312081614045565b92915050565b6000813590506131358161405c565b92915050565b60008151905061314a8161405c565b92915050565b60008135905061315f81614073565b92915050565b60008151905061317481614073565b92915050565b600082601f83011261318b57600080fd5b813561319b848260208601613095565b91505092915050565b6000813590506131b38161408a565b92915050565b60008083601f8401126131cb57600080fd5b8235905067ffffffffffffffff8111156131e457600080fd5b6020830191508360018202830111156131fc57600080fd5b9250929050565b600082601f83011261321457600080fd5b81356132248482602086016130d3565b91505092915050565b60008135905061323c816140a1565b92915050565b600081519050613251816140a1565b92915050565b60006020828403121561326957600080fd5b600061327784828501613111565b91505092915050565b6000806040838503121561329357600080fd5b60006132a185828601613111565b92505060206132b285828601613111565b9150509250929050565b6000806000606084860312156132d157600080fd5b60006132df86828701613111565b93505060206132f086828701613111565b92505060406133018682870161322d565b9150509250925092565b6000806000806080858703121561332157600080fd5b600061332f87828801613111565b945050602061334087828801613111565b93505060406133518782880161322d565b925050606085013567ffffffffffffffff81111561336e57600080fd5b61337a8782880161317a565b91505092959194509250565b6000806040838503121561339957600080fd5b60006133a785828601613111565b92505060206133b885828601613126565b9150509250929050565b6000806000604084860312156133d757600080fd5b60006133e586828701613111565b935050602084013567ffffffffffffffff81111561340257600080fd5b61340e868287016131b9565b92509250509250925092565b6000806040838503121561342d57600080fd5b600061343b85828601613111565b925050602061344c8582860161322d565b9150509250929050565b60006020828403121561346857600080fd5b600061347684828501613126565b91505092915050565b60006020828403121561349157600080fd5b600061349f8482850161313b565b91505092915050565b6000602082840312156134ba57600080fd5b60006134c884828501613150565b91505092915050565b6000602082840312156134e357600080fd5b60006134f184828501613165565b91505092915050565b60006020828403121561350c57600080fd5b600061351a848285016131a4565b91505092915050565b60006020828403121561353557600080fd5b600082013567ffffffffffffffff81111561354f57600080fd5b61355b84828501613203565b91505092915050565b60008060006060848603121561357957600080fd5b600084013567ffffffffffffffff81111561359357600080fd5b61359f86828701613203565b935050602084013567ffffffffffffffff8111156135bc57600080fd5b6135c886828701613203565b92505060406135d986828701613111565b9150509250925092565b6000602082840312156135f557600080fd5b60006136038482850161322d565b91505092915050565b60006020828403121561361e57600080fd5b600061362c84828501613242565b91505092915050565b60008060006060848603121561364a57600080fd5b60006136588682870161322d565b93505060206136698682870161322d565b925050604061367a8682870161322d565b9150509250925092565b60006136908383613895565b60208301905092915050565b6136a581613d28565b82525050565b6136b481613d28565b82525050565b60006136c582613b96565b6136cf8185613bc4565b93506136da83613b86565b8060005b8381101561370b5781516136f28882613684565b97506136fd83613bb7565b9250506001810190506136de565b5085935050505092915050565b61372181613d3a565b82525050565b600061373282613ba1565b61373c8185613bd5565b935061374c818560208601613df0565b61375581613fbc565b840191505092915050565b61376981613dcf565b82525050565b600061377a82613bac565b6137848185613be6565b9350613794818560208601613df0565b61379d81613fbc565b840191505092915050565b60006137b382613bac565b6137bd8185613bf7565b93506137cd818560208601613df0565b6137d681613fbc565b840191505092915050565b60006137ec82613bac565b6137f68185613c08565b9350613806818560208601613df0565b80840191505092915050565b600061381f602e83613bf7565b915061382a82613fcd565b604082019050919050565b6000613842601f83613bf7565b915061384d8261401c565b602082019050919050565b6000604083016000830151613870600086018261369c565b5060208301518482036020860152613888828261376f565b9150508091505092915050565b61389e81613da4565b82525050565b6138ad81613da4565b82525050565b6138bc81613dae565b82525050565b60006138ce82856137e1565b91506138da82846137e1565b91508190509392505050565b60006020820190506138fb60008301846136ab565b92915050565b600060808201905061391660008301876136ab565b61392360208301866136ab565b61393060408301856138a4565b81810360608301526139428184613727565b905095945050505050565b600060408201905061396260008301856136ab565b61396f60208301846138a4565b9392505050565b6000602082019050818103600083015261399081846136ba565b905092915050565b60006020820190506139ad6000830184613718565b92915050565b600060a08201905081810360008301526139cd8188613727565b905081810360208301526139e18187613858565b905081810360408301526139f58186613727565b9050613a0460608301856138b3565b8181036080830152613a168184613727565b90509695505050505050565b6000602082019050613a376000830184613760565b92915050565b60006020820190508181036000830152613a5781846137a8565b905092915050565b60006020820190508181036000830152613a7881613812565b9050919050565b60006020820190508181036000830152613a9881613835565b9050919050565b6000602082019050613ab460008301846138a4565b92915050565b6000608082019050613acf60008301876138a4565b613adc60208301866138a4565b613ae960408301856138a4565b613af66060830184613718565b95945050505050565b6000613b09613b1a565b9050613b158282613e55565b919050565b6000604051905090565b600067ffffffffffffffff821115613b3f57613b3e613f8d565b5b613b4882613fbc565b9050602081019050919050565b600067ffffffffffffffff821115613b7057613b6f613f8d565b5b613b7982613fbc565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613c1e82613da4565b9150613c2983613da4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c5e57613c5d613f00565b5b828201905092915050565b6000613c7482613da4565b9150613c7f83613da4565b925082613c8f57613c8e613f2f565b5b828204905092915050565b6000613ca582613da4565b9150613cb083613da4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ce957613ce8613f00565b5b828202905092915050565b6000613cff82613da4565b9150613d0a83613da4565b925082821015613d1d57613d1c613f00565b5b828203905092915050565b6000613d3382613d84565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613d7d82613d28565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b6000613dda82613dc2565b9050919050565b82818337600083830152505050565b60005b83811015613e0e578082015181840152602081019050613df3565b83811115613e1d576000848401525b50505050565b60006002820490506001821680613e3b57607f821691505b60208210811415613e4f57613e4e613f5e565b5b50919050565b613e5e82613fbc565b810181811067ffffffffffffffff82111715613e7d57613e7c613f8d565b5b80604052505050565b6000613e9182613da4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ec457613ec3613f00565b5b600182019050919050565b6000613eda82613da4565b9150613ee583613da4565b925082613ef557613ef4613f2f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61404e81613d28565b811461405957600080fd5b50565b61406581613d3a565b811461407057600080fd5b50565b61407c81613d46565b811461408757600080fd5b50565b61409381613d72565b811461409e57600080fd5b50565b6140aa81613da4565b81146140b557600080fd5b5056fea2646970667358221220a9d22b57a47f4d7a62196906ac4ad0318a833205bb8c6589d2a259112e1ddf4c64736f6c63430008040033", + "bytecode": "0x60a06040523480156200001157600080fd5b50604051620045af380380620045af83398181016040528101906200003791906200040c565b60016000819055506040518060a001604052806040518060400160405280600681526020017f4552433732310000000000000000000000000000000000000000000000000000815250815260200160405180604001604052808473ffffffffffffffffffffffffffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c6c696e6b2e6e6574000000000000000081525081525081526020016040518060400160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250815260200165032a361e860667ffffffffffffffff1681526020016040518060400160405280601881526020017f68747470733a2f2f65787465726e616c4c696e6b2e6e657400000000000000008152508152506002600082015181600001908051906020019062000194929190620002b4565b5060208201518160010160008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906200020392919062000345565b505050604082015181600301908051906020019062000224929190620002b4565b5060608201518160040160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550608082015181600501908051906020019062000272929190620002b4565b509050508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b8152505050620004eb565b828054620002c2906200046c565b90600052602060002090601f016020900481019282620002e6576000855562000332565b82601f106200030157805160ff191683800117855562000332565b8280016001018555821562000332579182015b828111156200033157825182559160200191906001019062000314565b5b509050620003419190620003d6565b5090565b82805462000353906200046c565b90600052602060002090601f016020900481019282620003775760008555620003c3565b82601f106200039257805160ff1916838001178555620003c3565b82800160010185558215620003c3579182015b82811115620003c2578251825591602001919060010190620003a5565b5b509050620003d29190620003d6565b5090565b5b80821115620003f1576000816000905550600101620003d7565b5090565b6000815190506200040681620004d1565b92915050565b6000602082840312156200041f57600080fd5b60006200042f84828501620003f5565b91505092915050565b600062000445826200044c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600060028204905060018216806200048557607f821691505b602082108114156200049c576200049b620004a2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620004dc8162000438565b8114620004e857600080fd5b50565b60805160601c6140a56200050a6000396000611fc601526140a56000f3fe6080604052600436106101b75760003560e01c806349df728c116100ec57806395d89b411161008a578063b88d4fde11610064578063b88d4fde1461061b578063c87b56dd14610644578063ce606ee014610681578063e985e9c5146106ac576101b7565b806395d89b411461059957806397ee73bb146105c4578063a22cb465146105f2576101b7565b80636352211e116100c65780636352211e146104c45780636a6278421461050157806370a0823114610531578063714c53981461056e576101b7565b806349df728c146104495780634d2f929a1461047257806355f804b31461049b576101b7565b806323b872dd11610159578063392f37e911610133578063392f37e9146103b15780633ccfd60b146103e05780633e2b81c4146103f757806342842e0e14610420576101b7565b806323b872dd1461031b578063248b71fc1461034457806327fbceac14610374576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a5780630b8eb2cf146102b3578063217cc2b4146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063077f224a14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190613421565b6106e9565b6040516101f09190613911565b60405180910390f35b34801561020557600080fd5b5061020e6107cb565b60405161021b91906139b6565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906134dd565b61085d565b005b34801561025957600080fd5b50610274600480360381019061026f919061355c565b6109e4565b604051610281919061385f565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190613393565b610a2a565b005b3480156102bf57600080fd5b506102c8610b33565b6040516102d5919061385f565b60405180910390f35b3480156102ea57600080fd5b50610305600480360381019061030091906131d0565b610b59565b6040516103129190613a56565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613235565b610c4f565b005b61035e60048036038101906103599190613393565b610ca6565b60405161036b91906138ef565b60405180910390f35b34801561038057600080fd5b5061039b6004803603810190610396919061333b565b611021565b6040516103a89190613a56565b60405180910390f35b3480156103bd57600080fd5b506103c66110fb565b6040516103d795949392919061392c565b60405180910390f35b3480156103ec57600080fd5b506103f56113bd565b005b34801561040357600080fd5b5061041e600480360381019061041991906133cf565b611493565b005b34801561042c57600080fd5b5061044760048036038101906104429190613235565b611557565b005b34801561045557600080fd5b50610470600480360381019061046b9190613473565b611577565b005b34801561047e57600080fd5b50610499600480360381019061049491906135ae565b61171d565b005b3480156104a757600080fd5b506104c260048036038101906104bd919061349c565b6117e2565b005b3480156104d057600080fd5b506104eb60048036038101906104e6919061355c565b611883565b6040516104f8919061385f565b60405180910390f35b61051b600480360381019061051691906131d0565b61192c565b6040516105289190613a56565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906131d0565b611bce565b6040516105659190613a56565b60405180910390f35b34801561057a57600080fd5b50610583611c7d565b60405161059091906139b6565b60405180910390f35b3480156105a557600080fd5b506105ae611d3b565b6040516105bb91906139b6565b60405180910390f35b3480156105d057600080fd5b506105d9611dcd565b6040516105e99493929190613a71565b60405180910390f35b3480156105fe57600080fd5b50610619600480360381019061061491906132ff565b611df8565b005b34801561062757600080fd5b50610642600480360381019061063d9190613284565b611e0e565b005b34801561065057600080fd5b5061066b6004803603810190610666919061355c565b611e67565b60405161067891906139b6565b60405180910390f35b34801561068d57600080fd5b50610696611fc4565b6040516106a3919061385f565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce91906131f9565b611fe8565b6040516106e09190613911565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107c457506107c38261207c565b5b9050919050565b6060600b80546107da90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461080690613dda565b80156108535780601f1061082857610100808354040283529160200191610853565b820191906000526020600020905b81548152906001019060200180831161083657829003601f168201915b5050505050905090565b600061086960016120e6565b9050801561088c5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610915576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b908051906020019061092b929190612ee5565b5083600c9080519060200190610942929190612ee5565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156109de5760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516109d5919061399b565b60405180910390a15b50505050565b60006109ef826121d8565b6015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3582611883565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a9d576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610abc61221a565b73ffffffffffffffffffffffffffffffffffffffff16141580610aed5750610aeb81610ae661221a565b611fe8565b155b15610b24576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2e8383612222565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600e60009054906101000a900460ff1615151415610c30576040517fdbc28d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c3a6122db565b9050610c4683826122f6565b80915050919050565b610c60610c5a61221a565b82612314565b610c96576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca18383836123a9565b505050565b606060026000541415610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590613a36565b60405180910390fd5b600260008190555060001515600e60009054906101000a900460ff1615151415610d44576040517fdbc28d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81610da06040518060400160405280600581526020017f636f756e740000000000000000000000000000000000000000000000000000008152508234610d8a9190613c51565b83600f60000154610d9b9190613c51565b6125fe565b60011515600e60009054906101000a900460ff1615151415610f1f5760001515600f60030160009054906101000a900460ff1615151415610e0d576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f60010154610e1d600a61269d565b1180610e415750600f6001015481610e35600a61269d565b610e3f9190613bca565b115b15610e78576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60000154610e899190613c51565b8134610e959190613c51565b14610ecc576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f6002015481610edc33611bce565b610ee69190613bca565b1115610f1e576040517fecdd05c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60008367ffffffffffffffff811115610f61577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610f8f5781602001602082028036833780820191505090505b50905060005b8481101561100d576000610fa76122db565b905080838381518110610fe3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050610ff987826122f6565b50808061100590613e3d565b915050610f95565b508092505050600160008190555092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110b46122db565b90506110c085826122f6565b60008484905011156110f05783836017600084815260200190815260200160002091906110ee929190612f6b565b505b809150509392505050565b600280600001805461110c90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461113890613dda565b80156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461120090613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461122c90613dda565b80156112795780601f1061124e57610100808354040283529160200191611279565b820191906000526020600020905b81548152906001019060200180831161125c57829003601f168201915b5050505050815250509080600301805461129290613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546112be90613dda565b801561130b5780601f106112e05761010080835404028352916020019161130b565b820191906000526020600020905b8154815290600101906020018083116112ee57829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff169080600501805461133a90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461136690613dda565b80156113b35780601f10611388576101008083540402835291602001916113b3565b820191906000526020600020905b81548152906001019060200180831161139657829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611444576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561148f573d6000803e3d6000fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60011515600e60009054906101000a900460ff16151514156115545780600f60030160006101000a81548160ff0219169083151502179055505b50565b61157283838360405180602001604052806000815250611e0e565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611639919061385f565b60206040518083038186803b15801561165157600080fd5b505afa158015611665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116899190613585565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116c69291906138c6565b602060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171891906133f8565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117a4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600f6000018190555081600f6001018190555080600f600201819055506001600e60006101000a81548160ff021916908315150217905550505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611869576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d908051906020019061187f929190612ee5565b5050565b6000806013600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611923576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b90613a36565b60405180910390fd5b600260008190555060001515600e60009054906101000a900460ff16151514156119ca576040517fdbc28d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001611a276040518060400160405280600581526020017f636f756e740000000000000000000000000000000000000000000000000000008152508234611a119190613c51565b83600f60000154611a229190613c51565b6125fe565b60011515600e60009054906101000a900460ff1615151415611ba65760001515600f60030160009054906101000a900460ff1615151415611a94576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f60010154611aa4600a61269d565b1180611ac85750600f6001015481611abc600a61269d565b611ac69190613bca565b115b15611aff576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60000154611b109190613c51565b8134611b1c9190613c51565b14611b53576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f6002015481611b6333611bce565b611b6d9190613bca565b1115611ba5576040517fecdd05c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000611bb06122db565b9050611bbc84826122f6565b80925050506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606000600d8054611c8e90613dda565b905011611caa5760405180602001604052806000815250611d36565b600d8054611cb790613dda565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce390613dda565b8015611d305780601f10611d0557610100808354040283529160200191611d30565b820191906000526020600020905b815481529060010190602001808311611d1357829003601f168201915b50505050505b905090565b6060600c8054611d4a90613dda565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7690613dda565b8015611dc35780601f10611d9857610100808354040283529160200191611dc3565b820191906000526020600020905b815481529060010190602001808311611da657829003601f168201915b5050505050905090565b600f8060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b611e0a611e0361221a565b83836126ab565b5050565b611e1f611e1961221a565b83612314565b611e55576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6184848484612876565b50505050565b6060611e72826121d8565b600e60009054906101000a900460ff16611f66576000601760008481526020019081526020016000208054611ea690613dda565b905011611ec25760405180602001604052806000815250611f5f565b601760008381526020019081526020016000208054611ee090613dda565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0c90613dda565b8015611f595780601f10611f2e57610100808354040283529160200191611f59565b820191906000526020600020905b815481529060010190602001808311611f3c57829003601f168201915b50505050505b9050611fbf565b6000611f70611c7d565b90506000815111611f905760405180602001604052806000815250611fbb565b80611f9a846128c9565b604051602001611fab92919061383b565b6040516020818303038152906040525b9150505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff161561215c5760018260ff16148015612114575061211230612a76565b155b612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90613a16565b60405180910390fd5b600090506121d3565b8160ff16600160009054906101000a900460ff1660ff16106121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90613a16565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b6121e181612a89565b612217576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816015600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661229583611883565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122e7600a612af5565b6122f1600a61269d565b905090565b612310828260405180602001604052806000815250612b0b565b5050565b60008061232083611883565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061236257506123618185611fe8565b5b806123a057508373ffffffffffffffffffffffffffffffffffffffff16612388846109e4565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123c982611883565b73ffffffffffffffffffffffffffffffffffffffff1614612416576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561247d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612488838383612b5d565b612493600082612222565b6001601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e39190613cab565b925050819055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461253a9190613bca565b92505081905550816013600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125f9838383612b62565b505050565b612698838383604051602401612616939291906139d8565b6040516020818303038152906040527f969cdd03000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b67565b505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612712576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612778576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128699190613911565b60405180910390a3505050565b6128818484846123a9565b61288d84848484612b90565b6128c3576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000821415612911576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a71565b600082905060005b6000821461294357808061292c90613e3d565b915050600a8261293c9190613c20565b9150612919565b60008167ffffffffffffffff811115612985577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129b75781602001600182028036833780820191505090505b5090505b60008514612a6a576001826129d09190613cab565b9150600a856129df9190613e86565b60306129eb9190613bca565b60f81b818381518110612a27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a639190613c20565b94506129bb565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b612b158383612d1e565b612b226000848484612b90565b612b58576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b6000612bb18473ffffffffffffffffffffffffffffffffffffffff16612a76565b15612d11578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bda61221a565b8786866040518563ffffffff1660e01b8152600401612bfc949392919061387a565b602060405180830381600087803b158015612c1657600080fd5b505af1925050508015612c4757506040513d601f19601f82011682018060405250810190612c44919061344a565b60015b612cc1573d8060008114612c77576040519150601f19603f3d011682016040523d82523d6000602084013e612c7c565b606091505b50600081511415612cb9576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d16565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d85576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d8e81612a89565b15612dc4576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd060008383612b5d565b6001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e209190613bca565b92505081905550816013600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ee160008383612b62565b5050565b828054612ef190613dda565b90600052602060002090601f016020900481019282612f135760008555612f5a565b82601f10612f2c57805160ff1916838001178555612f5a565b82800160010185558215612f5a579182015b82811115612f59578251825591602001919060010190612f3e565b5b509050612f679190612ff1565b5090565b828054612f7790613dda565b90600052602060002090601f016020900481019282612f995760008555612fe0565b82601f10612fb257803560ff1916838001178555612fe0565b82800160010185558215612fe0579182015b82811115612fdf578235825591602001919060010190612fc4565b5b509050612fed9190612ff1565b5090565b5b8082111561300a576000816000905550600101612ff2565b5090565b600061302161301c84613adb565b613ab6565b90508281526020810184848401111561303957600080fd5b613044848285613d98565b509392505050565b600061305f61305a84613b0c565b613ab6565b90508281526020810184848401111561307757600080fd5b613082848285613d98565b509392505050565b60008135905061309981613ffc565b92915050565b6000813590506130ae81614013565b92915050565b6000815190506130c381614013565b92915050565b6000813590506130d88161402a565b92915050565b6000815190506130ed8161402a565b92915050565b600082601f83011261310457600080fd5b813561311484826020860161300e565b91505092915050565b60008135905061312c81614041565b92915050565b60008083601f84011261314457600080fd5b8235905067ffffffffffffffff81111561315d57600080fd5b60208301915083600182028301111561317557600080fd5b9250929050565b600082601f83011261318d57600080fd5b813561319d84826020860161304c565b91505092915050565b6000813590506131b581614058565b92915050565b6000815190506131ca81614058565b92915050565b6000602082840312156131e257600080fd5b60006131f08482850161308a565b91505092915050565b6000806040838503121561320c57600080fd5b600061321a8582860161308a565b925050602061322b8582860161308a565b9150509250929050565b60008060006060848603121561324a57600080fd5b60006132588682870161308a565b93505060206132698682870161308a565b925050604061327a868287016131a6565b9150509250925092565b6000806000806080858703121561329a57600080fd5b60006132a88782880161308a565b94505060206132b98782880161308a565b93505060406132ca878288016131a6565b925050606085013567ffffffffffffffff8111156132e757600080fd5b6132f3878288016130f3565b91505092959194509250565b6000806040838503121561331257600080fd5b60006133208582860161308a565b92505060206133318582860161309f565b9150509250929050565b60008060006040848603121561335057600080fd5b600061335e8682870161308a565b935050602084013567ffffffffffffffff81111561337b57600080fd5b61338786828701613132565b92509250509250925092565b600080604083850312156133a657600080fd5b60006133b48582860161308a565b92505060206133c5858286016131a6565b9150509250929050565b6000602082840312156133e157600080fd5b60006133ef8482850161309f565b91505092915050565b60006020828403121561340a57600080fd5b6000613418848285016130b4565b91505092915050565b60006020828403121561343357600080fd5b6000613441848285016130c9565b91505092915050565b60006020828403121561345c57600080fd5b600061346a848285016130de565b91505092915050565b60006020828403121561348557600080fd5b60006134938482850161311d565b91505092915050565b6000602082840312156134ae57600080fd5b600082013567ffffffffffffffff8111156134c857600080fd5b6134d48482850161317c565b91505092915050565b6000806000606084860312156134f257600080fd5b600084013567ffffffffffffffff81111561350c57600080fd5b6135188682870161317c565b935050602084013567ffffffffffffffff81111561353557600080fd5b6135418682870161317c565b92505060406135528682870161308a565b9150509250925092565b60006020828403121561356e57600080fd5b600061357c848285016131a6565b91505092915050565b60006020828403121561359757600080fd5b60006135a5848285016131bb565b91505092915050565b6000806000606084860312156135c357600080fd5b60006135d1868287016131a6565b93505060206135e2868287016131a6565b92505060406135f3868287016131a6565b9150509250925092565b6000613609838361380e565b60208301905092915050565b61361e81613cdf565b82525050565b61362d81613cdf565b82525050565b600061363e82613b4d565b6136488185613b7b565b935061365383613b3d565b8060005b8381101561368457815161366b88826135fd565b975061367683613b6e565b925050600181019050613657565b5085935050505092915050565b61369a81613cf1565b82525050565b60006136ab82613b58565b6136b58185613b8c565b93506136c5818560208601613da7565b6136ce81613f73565b840191505092915050565b6136e281613d86565b82525050565b60006136f382613b63565b6136fd8185613b9d565b935061370d818560208601613da7565b61371681613f73565b840191505092915050565b600061372c82613b63565b6137368185613bae565b9350613746818560208601613da7565b61374f81613f73565b840191505092915050565b600061376582613b63565b61376f8185613bbf565b935061377f818560208601613da7565b80840191505092915050565b6000613798602e83613bae565b91506137a382613f84565b604082019050919050565b60006137bb601f83613bae565b91506137c682613fd3565b602082019050919050565b60006040830160008301516137e96000860182613615565b506020830151848203602086015261380182826136e8565b9150508091505092915050565b61381781613d5b565b82525050565b61382681613d5b565b82525050565b61383581613d65565b82525050565b6000613847828561375a565b9150613853828461375a565b91508190509392505050565b60006020820190506138746000830184613624565b92915050565b600060808201905061388f6000830187613624565b61389c6020830186613624565b6138a9604083018561381d565b81810360608301526138bb81846136a0565b905095945050505050565b60006040820190506138db6000830185613624565b6138e8602083018461381d565b9392505050565b600060208201905081810360008301526139098184613633565b905092915050565b60006020820190506139266000830184613691565b92915050565b600060a082019050818103600083015261394681886136a0565b9050818103602083015261395a81876137d1565b9050818103604083015261396e81866136a0565b905061397d606083018561382c565b818103608083015261398f81846136a0565b90509695505050505050565b60006020820190506139b060008301846136d9565b92915050565b600060208201905081810360008301526139d08184613721565b905092915050565b600060608201905081810360008301526139f28186613721565b9050613a01602083018561381d565b613a0e604083018461381d565b949350505050565b60006020820190508181036000830152613a2f8161378b565b9050919050565b60006020820190508181036000830152613a4f816137ae565b9050919050565b6000602082019050613a6b600083018461381d565b92915050565b6000608082019050613a86600083018761381d565b613a93602083018661381d565b613aa0604083018561381d565b613aad6060830184613691565b95945050505050565b6000613ac0613ad1565b9050613acc8282613e0c565b919050565b6000604051905090565b600067ffffffffffffffff821115613af657613af5613f44565b5b613aff82613f73565b9050602081019050919050565b600067ffffffffffffffff821115613b2757613b26613f44565b5b613b3082613f73565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bd582613d5b565b9150613be083613d5b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c1557613c14613eb7565b5b828201905092915050565b6000613c2b82613d5b565b9150613c3683613d5b565b925082613c4657613c45613ee6565b5b828204905092915050565b6000613c5c82613d5b565b9150613c6783613d5b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ca057613c9f613eb7565b5b828202905092915050565b6000613cb682613d5b565b9150613cc183613d5b565b925082821015613cd457613cd3613eb7565b5b828203905092915050565b6000613cea82613d3b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613d3482613cdf565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b6000613d9182613d79565b9050919050565b82818337600083830152505050565b60005b83811015613dc5578082015181840152602081019050613daa565b83811115613dd4576000848401525b50505050565b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613f15565b5b50919050565b613e1582613f73565b810181811067ffffffffffffffff82111715613e3457613e33613f44565b5b80604052505050565b6000613e4882613d5b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e7b57613e7a613eb7565b5b600182019050919050565b6000613e9182613d5b565b9150613e9c83613d5b565b925082613eac57613eab613ee6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61400581613cdf565b811461401057600080fd5b50565b61401c81613cf1565b811461402757600080fd5b50565b61403381613cfd565b811461403e57600080fd5b50565b61404a81613d29565b811461405557600080fd5b50565b61406181613d5b565b811461406c57600080fd5b5056fea2646970667358221220251f76743c9bbbd5c5eb5d5f95ebe1d4331dabed237de68fcc28d6b068c80d5f64736f6c63430008040033", + "deployedBytecode": "0x6080604052600436106101b75760003560e01c806349df728c116100ec57806395d89b411161008a578063b88d4fde11610064578063b88d4fde1461061b578063c87b56dd14610644578063ce606ee014610681578063e985e9c5146106ac576101b7565b806395d89b411461059957806397ee73bb146105c4578063a22cb465146105f2576101b7565b80636352211e116100c65780636352211e146104c45780636a6278421461050157806370a0823114610531578063714c53981461056e576101b7565b806349df728c146104495780634d2f929a1461047257806355f804b31461049b576101b7565b806323b872dd11610159578063392f37e911610133578063392f37e9146103b15780633ccfd60b146103e05780633e2b81c4146103f757806342842e0e14610420576101b7565b806323b872dd1461031b578063248b71fc1461034457806327fbceac14610374576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a5780630b8eb2cf146102b3578063217cc2b4146102de576101b7565b806301ffc9a7146101bc57806306fdde03146101f9578063077f224a14610224575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190613421565b6106e9565b6040516101f09190613911565b60405180910390f35b34801561020557600080fd5b5061020e6107cb565b60405161021b91906139b6565b60405180910390f35b34801561023057600080fd5b5061024b600480360381019061024691906134dd565b61085d565b005b34801561025957600080fd5b50610274600480360381019061026f919061355c565b6109e4565b604051610281919061385f565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190613393565b610a2a565b005b3480156102bf57600080fd5b506102c8610b33565b6040516102d5919061385f565b60405180910390f35b3480156102ea57600080fd5b50610305600480360381019061030091906131d0565b610b59565b6040516103129190613a56565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613235565b610c4f565b005b61035e60048036038101906103599190613393565b610ca6565b60405161036b91906138ef565b60405180910390f35b34801561038057600080fd5b5061039b6004803603810190610396919061333b565b611021565b6040516103a89190613a56565b60405180910390f35b3480156103bd57600080fd5b506103c66110fb565b6040516103d795949392919061392c565b60405180910390f35b3480156103ec57600080fd5b506103f56113bd565b005b34801561040357600080fd5b5061041e600480360381019061041991906133cf565b611493565b005b34801561042c57600080fd5b5061044760048036038101906104429190613235565b611557565b005b34801561045557600080fd5b50610470600480360381019061046b9190613473565b611577565b005b34801561047e57600080fd5b50610499600480360381019061049491906135ae565b61171d565b005b3480156104a757600080fd5b506104c260048036038101906104bd919061349c565b6117e2565b005b3480156104d057600080fd5b506104eb60048036038101906104e6919061355c565b611883565b6040516104f8919061385f565b60405180910390f35b61051b600480360381019061051691906131d0565b61192c565b6040516105289190613a56565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906131d0565b611bce565b6040516105659190613a56565b60405180910390f35b34801561057a57600080fd5b50610583611c7d565b60405161059091906139b6565b60405180910390f35b3480156105a557600080fd5b506105ae611d3b565b6040516105bb91906139b6565b60405180910390f35b3480156105d057600080fd5b506105d9611dcd565b6040516105e99493929190613a71565b60405180910390f35b3480156105fe57600080fd5b50610619600480360381019061061491906132ff565b611df8565b005b34801561062757600080fd5b50610642600480360381019061063d9190613284565b611e0e565b005b34801561065057600080fd5b5061066b6004803603810190610666919061355c565b611e67565b60405161067891906139b6565b60405180910390f35b34801561068d57600080fd5b50610696611fc4565b6040516106a3919061385f565b60405180910390f35b3480156106b857600080fd5b506106d360048036038101906106ce91906131f9565b611fe8565b6040516106e09190613911565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107b457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107c457506107c38261207c565b5b9050919050565b6060600b80546107da90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461080690613dda565b80156108535780601f1061082857610100808354040283529160200191610853565b820191906000526020600020905b81548152906001019060200180831161083657829003601f168201915b5050505050905090565b600061086960016120e6565b9050801561088c5760018060016101000a81548160ff0219169083151502179055505b81600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610915576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84600b908051906020019061092b929190612ee5565b5083600c9080519060200190610942929190612ee5565b5082600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080156109de5760006001806101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516109d5919061399b565b60405180910390a15b50505050565b60006109ef826121d8565b6015600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a3582611883565b90508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a9d576040517f367558c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610abc61221a565b73ffffffffffffffffffffffffffffffffffffffff16141580610aed5750610aeb81610ae661221a565b611fe8565b155b15610b24576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b2e8383612222565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610be2576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60001515600e60009054906101000a900460ff1615151415610c30576040517fdbc28d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610c3a6122db565b9050610c4683826122f6565b80915050919050565b610c60610c5a61221a565b82612314565b610c96576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca18383836123a9565b505050565b606060026000541415610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590613a36565b60405180910390fd5b600260008190555060001515600e60009054906101000a900460ff1615151415610d44576040517fdbc28d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81610da06040518060400160405280600581526020017f636f756e740000000000000000000000000000000000000000000000000000008152508234610d8a9190613c51565b83600f60000154610d9b9190613c51565b6125fe565b60011515600e60009054906101000a900460ff1615151415610f1f5760001515600f60030160009054906101000a900460ff1615151415610e0d576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f60010154610e1d600a61269d565b1180610e415750600f6001015481610e35600a61269d565b610e3f9190613bca565b115b15610e78576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60000154610e899190613c51565b8134610e959190613c51565b14610ecc576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f6002015481610edc33611bce565b610ee69190613bca565b1115610f1e576040517fecdd05c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60008367ffffffffffffffff811115610f61577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610f8f5781602001602082028036833780820191505090505b50905060005b8481101561100d576000610fa76122db565b905080838381518110610fe3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050610ff987826122f6565b50808061100590613e3d565b915050610f95565b508092505050600160008190555092915050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110aa576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006110b46122db565b90506110c085826122f6565b60008484905011156110f05783836017600084815260200190815260200160002091906110ee929190612f6b565b505b809150509392505050565b600280600001805461110c90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461113890613dda565b80156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b505050505090806001016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805461120090613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461122c90613dda565b80156112795780601f1061124e57610100808354040283529160200191611279565b820191906000526020600020905b81548152906001019060200180831161125c57829003601f168201915b5050505050815250509080600301805461129290613dda565b80601f01602080910402602001604051908101604052809291908181526020018280546112be90613dda565b801561130b5780601f106112e05761010080835404028352916020019161130b565b820191906000526020600020905b8154815290600101906020018083116112ee57829003601f168201915b5050505050908060040160009054906101000a900467ffffffffffffffff169080600501805461133a90613dda565b80601f016020809104026020016040519081016040528092919081815260200182805461136690613dda565b80156113b35780601f10611388576101008083540402835291602001916113b3565b820191906000526020600020905b81548152906001019060200180831161139657829003601f168201915b5050505050905085565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611444576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561148f573d6000803e3d6000fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461151a576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60011515600e60009054906101000a900460ff16151514156115545780600f60030160006101000a81548160ff0219169083151502179055505b50565b61157283838360405180602001604052806000815250611e0e565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611639919061385f565b60206040518083038186803b15801561165157600080fd5b505afa158015611665573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116899190613585565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016116c69291906138c6565b602060405180830381600087803b1580156116e057600080fd5b505af11580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171891906133f8565b505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117a4576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600f6000018190555081600f6001018190555080600f600201819055506001600e60006101000a81548160ff021916908315150217905550505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611869576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600d908051906020019061187f929190612ee5565b5050565b6000806013600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611923576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b600060026000541415611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b90613a36565b60405180910390fd5b600260008190555060001515600e60009054906101000a900460ff16151514156119ca576040517fdbc28d8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001611a276040518060400160405280600581526020017f636f756e740000000000000000000000000000000000000000000000000000008152508234611a119190613c51565b83600f60000154611a229190613c51565b6125fe565b60011515600e60009054906101000a900460ff1615151415611ba65760001515600f60030160009054906101000a900460ff1615151415611a94576040517f15b1bdcd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f60010154611aa4600a61269d565b1180611ac85750600f6001015481611abc600a61269d565b611ac69190613bca565b115b15611aff576040517f8a164f6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f60000154611b109190613c51565b8134611b1c9190613c51565b14611b53576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f6002015481611b6333611bce565b611b6d9190613bca565b1115611ba5576040517fecdd05c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6000611bb06122db565b9050611bbc84826122f6565b80925050506001600081905550919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c36576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606000600d8054611c8e90613dda565b905011611caa5760405180602001604052806000815250611d36565b600d8054611cb790613dda565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce390613dda565b8015611d305780601f10611d0557610100808354040283529160200191611d30565b820191906000526020600020905b815481529060010190602001808311611d1357829003601f168201915b50505050505b905090565b6060600c8054611d4a90613dda565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7690613dda565b8015611dc35780601f10611d9857610100808354040283529160200191611dc3565b820191906000526020600020905b815481529060010190602001808311611da657829003601f168201915b5050505050905090565b600f8060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b611e0a611e0361221a565b83836126ab565b5050565b611e1f611e1961221a565b83612314565b611e55576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6184848484612876565b50505050565b6060611e72826121d8565b600e60009054906101000a900460ff16611f66576000601760008481526020019081526020016000208054611ea690613dda565b905011611ec25760405180602001604052806000815250611f5f565b601760008381526020019081526020016000208054611ee090613dda565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0c90613dda565b8015611f595780601f10611f2e57610100808354040283529160200191611f59565b820191906000526020600020905b815481529060010190602001808311611f3c57829003601f168201915b50505050505b9050611fbf565b6000611f70611c7d565b90506000815111611f905760405180602001604052806000815250611fbb565b80611f9a846128c9565b604051602001611fab92919061383b565b6040516020818303038152906040525b9150505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060018054906101000a900460ff161561215c5760018260ff16148015612114575061211230612a76565b155b612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a90613a16565b60405180910390fd5b600090506121d3565b8160ff16600160009054906101000a900460ff1660ff16106121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90613a16565b60405180910390fd5b81600160006101000a81548160ff021916908360ff160217905550600190505b919050565b6121e181612a89565b612217576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600033905090565b816015600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661229583611883565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122e7600a612af5565b6122f1600a61269d565b905090565b612310828260405180602001604052806000815250612b0b565b5050565b60008061232083611883565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061236257506123618185611fe8565b5b806123a057508373ffffffffffffffffffffffffffffffffffffffff16612388846109e4565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123c982611883565b73ffffffffffffffffffffffffffffffffffffffff1614612416576040517f3a6bbed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561247d576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612488838383612b5d565b612493600082612222565b6001601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e39190613cab565b925050819055506001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461253a9190613bca565b92505081905550816013600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125f9838383612b62565b505050565b612698838383604051602401612616939291906139d8565b6040516020818303038152906040527f969cdd03000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612b67565b505050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612712576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612778576040517ff4b33eeb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516128699190613911565b60405180910390a3505050565b6128818484846123a9565b61288d84848484612b90565b6128c3576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606000821415612911576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a71565b600082905060005b6000821461294357808061292c90613e3d565b915050600a8261293c9190613c20565b9150612919565b60008167ffffffffffffffff811115612985577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129b75781602001600182028036833780820191505090505b5090505b60008514612a6a576001826129d09190613cab565b9150600a856129df9190613e86565b60306129eb9190613bca565b60f81b818381518110612a27577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a639190613c20565b94506129bb565b8093505050505b919050565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166013600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6001816000016000828254019250508190555050565b612b158383612d1e565b612b226000848484612b90565b612b58576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b505050565b60008151905060006a636f6e736f6c652e6c6f679050602083016000808483855afa5050505050565b6000612bb18473ffffffffffffffffffffffffffffffffffffffff16612a76565b15612d11578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612bda61221a565b8786866040518563ffffffff1660e01b8152600401612bfc949392919061387a565b602060405180830381600087803b158015612c1657600080fd5b505af1925050508015612c4757506040513d601f19601f82011682018060405250810190612c44919061344a565b60015b612cc1573d8060008114612c77576040519150601f19603f3d011682016040523d82523d6000602084013e612c7c565b606091505b50600081511415612cb9576040517f44ccafd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d16565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d85576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d8e81612a89565b15612dc4576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612dd060008383612b5d565b6001601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e209190613bca565b92505081905550816013600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ee160008383612b62565b5050565b828054612ef190613dda565b90600052602060002090601f016020900481019282612f135760008555612f5a565b82601f10612f2c57805160ff1916838001178555612f5a565b82800160010185558215612f5a579182015b82811115612f59578251825591602001919060010190612f3e565b5b509050612f679190612ff1565b5090565b828054612f7790613dda565b90600052602060002090601f016020900481019282612f995760008555612fe0565b82601f10612fb257803560ff1916838001178555612fe0565b82800160010185558215612fe0579182015b82811115612fdf578235825591602001919060010190612fc4565b5b509050612fed9190612ff1565b5090565b5b8082111561300a576000816000905550600101612ff2565b5090565b600061302161301c84613adb565b613ab6565b90508281526020810184848401111561303957600080fd5b613044848285613d98565b509392505050565b600061305f61305a84613b0c565b613ab6565b90508281526020810184848401111561307757600080fd5b613082848285613d98565b509392505050565b60008135905061309981613ffc565b92915050565b6000813590506130ae81614013565b92915050565b6000815190506130c381614013565b92915050565b6000813590506130d88161402a565b92915050565b6000815190506130ed8161402a565b92915050565b600082601f83011261310457600080fd5b813561311484826020860161300e565b91505092915050565b60008135905061312c81614041565b92915050565b60008083601f84011261314457600080fd5b8235905067ffffffffffffffff81111561315d57600080fd5b60208301915083600182028301111561317557600080fd5b9250929050565b600082601f83011261318d57600080fd5b813561319d84826020860161304c565b91505092915050565b6000813590506131b581614058565b92915050565b6000815190506131ca81614058565b92915050565b6000602082840312156131e257600080fd5b60006131f08482850161308a565b91505092915050565b6000806040838503121561320c57600080fd5b600061321a8582860161308a565b925050602061322b8582860161308a565b9150509250929050565b60008060006060848603121561324a57600080fd5b60006132588682870161308a565b93505060206132698682870161308a565b925050604061327a868287016131a6565b9150509250925092565b6000806000806080858703121561329a57600080fd5b60006132a88782880161308a565b94505060206132b98782880161308a565b93505060406132ca878288016131a6565b925050606085013567ffffffffffffffff8111156132e757600080fd5b6132f3878288016130f3565b91505092959194509250565b6000806040838503121561331257600080fd5b60006133208582860161308a565b92505060206133318582860161309f565b9150509250929050565b60008060006040848603121561335057600080fd5b600061335e8682870161308a565b935050602084013567ffffffffffffffff81111561337b57600080fd5b61338786828701613132565b92509250509250925092565b600080604083850312156133a657600080fd5b60006133b48582860161308a565b92505060206133c5858286016131a6565b9150509250929050565b6000602082840312156133e157600080fd5b60006133ef8482850161309f565b91505092915050565b60006020828403121561340a57600080fd5b6000613418848285016130b4565b91505092915050565b60006020828403121561343357600080fd5b6000613441848285016130c9565b91505092915050565b60006020828403121561345c57600080fd5b600061346a848285016130de565b91505092915050565b60006020828403121561348557600080fd5b60006134938482850161311d565b91505092915050565b6000602082840312156134ae57600080fd5b600082013567ffffffffffffffff8111156134c857600080fd5b6134d48482850161317c565b91505092915050565b6000806000606084860312156134f257600080fd5b600084013567ffffffffffffffff81111561350c57600080fd5b6135188682870161317c565b935050602084013567ffffffffffffffff81111561353557600080fd5b6135418682870161317c565b92505060406135528682870161308a565b9150509250925092565b60006020828403121561356e57600080fd5b600061357c848285016131a6565b91505092915050565b60006020828403121561359757600080fd5b60006135a5848285016131bb565b91505092915050565b6000806000606084860312156135c357600080fd5b60006135d1868287016131a6565b93505060206135e2868287016131a6565b92505060406135f3868287016131a6565b9150509250925092565b6000613609838361380e565b60208301905092915050565b61361e81613cdf565b82525050565b61362d81613cdf565b82525050565b600061363e82613b4d565b6136488185613b7b565b935061365383613b3d565b8060005b8381101561368457815161366b88826135fd565b975061367683613b6e565b925050600181019050613657565b5085935050505092915050565b61369a81613cf1565b82525050565b60006136ab82613b58565b6136b58185613b8c565b93506136c5818560208601613da7565b6136ce81613f73565b840191505092915050565b6136e281613d86565b82525050565b60006136f382613b63565b6136fd8185613b9d565b935061370d818560208601613da7565b61371681613f73565b840191505092915050565b600061372c82613b63565b6137368185613bae565b9350613746818560208601613da7565b61374f81613f73565b840191505092915050565b600061376582613b63565b61376f8185613bbf565b935061377f818560208601613da7565b80840191505092915050565b6000613798602e83613bae565b91506137a382613f84565b604082019050919050565b60006137bb601f83613bae565b91506137c682613fd3565b602082019050919050565b60006040830160008301516137e96000860182613615565b506020830151848203602086015261380182826136e8565b9150508091505092915050565b61381781613d5b565b82525050565b61382681613d5b565b82525050565b61383581613d65565b82525050565b6000613847828561375a565b9150613853828461375a565b91508190509392505050565b60006020820190506138746000830184613624565b92915050565b600060808201905061388f6000830187613624565b61389c6020830186613624565b6138a9604083018561381d565b81810360608301526138bb81846136a0565b905095945050505050565b60006040820190506138db6000830185613624565b6138e8602083018461381d565b9392505050565b600060208201905081810360008301526139098184613633565b905092915050565b60006020820190506139266000830184613691565b92915050565b600060a082019050818103600083015261394681886136a0565b9050818103602083015261395a81876137d1565b9050818103604083015261396e81866136a0565b905061397d606083018561382c565b818103608083015261398f81846136a0565b90509695505050505050565b60006020820190506139b060008301846136d9565b92915050565b600060208201905081810360008301526139d08184613721565b905092915050565b600060608201905081810360008301526139f28186613721565b9050613a01602083018561381d565b613a0e604083018461381d565b949350505050565b60006020820190508181036000830152613a2f8161378b565b9050919050565b60006020820190508181036000830152613a4f816137ae565b9050919050565b6000602082019050613a6b600083018461381d565b92915050565b6000608082019050613a86600083018761381d565b613a93602083018661381d565b613aa0604083018561381d565b613aad6060830184613691565b95945050505050565b6000613ac0613ad1565b9050613acc8282613e0c565b919050565b6000604051905090565b600067ffffffffffffffff821115613af657613af5613f44565b5b613aff82613f73565b9050602081019050919050565b600067ffffffffffffffff821115613b2757613b26613f44565b5b613b3082613f73565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613bd582613d5b565b9150613be083613d5b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c1557613c14613eb7565b5b828201905092915050565b6000613c2b82613d5b565b9150613c3683613d5b565b925082613c4657613c45613ee6565b5b828204905092915050565b6000613c5c82613d5b565b9150613c6783613d5b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613ca057613c9f613eb7565b5b828202905092915050565b6000613cb682613d5b565b9150613cc183613d5b565b925082821015613cd457613cd3613eb7565b5b828203905092915050565b6000613cea82613d3b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000613d3482613cdf565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b6000613d9182613d79565b9050919050565b82818337600083830152505050565b60005b83811015613dc5578082015181840152602081019050613daa565b83811115613dd4576000848401525b50505050565b60006002820490506001821680613df257607f821691505b60208210811415613e0657613e05613f15565b5b50919050565b613e1582613f73565b810181811067ffffffffffffffff82111715613e3457613e33613f44565b5b80604052505050565b6000613e4882613d5b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613e7b57613e7a613eb7565b5b600182019050919050565b6000613e9182613d5b565b9150613e9c83613d5b565b925082613eac57613eab613ee6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61400581613cdf565b811461401057600080fd5b50565b61401c81613cf1565b811461402757600080fd5b50565b61403381613cfd565b811461403e57600080fd5b50565b61404a81613d29565b811461405557600080fd5b50565b61406181613d5b565b811461406c57600080fd5b5056fea2646970667358221220251f76743c9bbbd5c5eb5d5f95ebe1d4331dabed237de68fcc28d6b068c80d5f64736f6c63430008040033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json index 388f41b6..f340aa3e 100644 --- a/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json +++ b/packages/hyperverse-evm-erc721/artifacts/contracts/ERC721Factory.sol/ERC721Factory.json @@ -183,8 +183,8 @@ "type": "function" } ], - "bytecode": "0x60c060405234801561001057600080fd5b50604051610d76380380610d76833981810160405281019061003291906100bc565b8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050610141565b6000815190506100b68161012a565b92915050565b600080604083850312156100cf57600080fd5b60006100dd858286016100a7565b92505060206100ee858286016100a7565b9150509250929050565b60006101038261010a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610133816100f8565b811461013e57600080fd5b50565b60805160601c60a05160601c610bfc61017a60003960008181610457015261065b01526000818161019701526103470152610bfc6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea2646970667358221220e4d284f9d778c0bb6f2db366b8ef584906f3c0852fbb6f60f47c493aac8f5fb864736f6c63430008040033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea2646970667358221220e4d284f9d778c0bb6f2db366b8ef584906f3c0852fbb6f60f47c493aac8f5fb864736f6c63430008040033", + "bytecode": "0x60c060405234801561001057600080fd5b50604051610d76380380610d76833981810160405281019061003291906100bc565b8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250505050610141565b6000815190506100b68161012a565b92915050565b600080604083850312156100cf57600080fd5b60006100dd858286016100a7565b92505060206100ee858286016100a7565b9150509250929050565b60006101038261010a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b610133816100f8565b811461013e57600080fd5b50565b60805160601c60a05160601c610bfc61017a60003960008181610457015261065b01526000818161019701526103470152610bfc6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea2646970667358221220e11e20048cd79e996073dd0ae9c3e0ad5860b8c8734e6c0229d3e0500c9fa81664736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063bf04bebb1161005b578063bf04bebb146100ee578063cd446e221461010a578063cf33d58814610128578063fd9153a3146101585761007d565b80631e9b4755146100825780638da5cb5b146100a0578063b7fba4d3146100be575b600080fd5b61008a610189565b6040516100979190610a03565b60405180910390f35b6100a8610195565b6040516100b5919061091b565b60405180910390f35b6100d860048036038101906100d391906107fe565b6101b9565b6040516100e5919061097a565b60405180910390f35b61010860048036038101906101039190610827565b6102a8565b005b610112610659565b60405161011f919061091b565b60405180910390f35b610142600480360381019061013d91906107fe565b61067d565b60405161014f919061095f565b60405180910390f35b610172600480360381019061016d91906107fe565b61069d565b604051610180929190610995565b60405180910390f35b60008060000154905081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661023e576040517f5173702000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b82600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610310576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061039557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6103cb576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610450576040517ff76d29a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061047b7f0000000000000000000000000000000000000000000000000000000000000000610701565b90508073ffffffffffffffffffffffffffffffffffffffff1663077f224a8686896040518463ffffffff1660e01b81526004016104ba939291906109be565b600060405180830381600087803b1580156104d457600080fd5b505af11580156104e8573d6000803e3d6000fd5b505050506000600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050818160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610617600061076b565b7f6c253b297385738b44c5cd705bc77dfaf43a58b0a4e9fe4f4eb44eebb417db118783604051610648929190610936565b60405180910390a150505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915054906101000a900460ff1681565b60016020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082565b6000808260601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505050919050565b6001816000016000828254019250508190555050565b600061079461078f84610a43565b610a1e565b9050828152602081018484840111156107ac57600080fd5b6107b7848285610afc565b509392505050565b6000813590506107ce81610baf565b92915050565b600082601f8301126107e557600080fd5b81356107f5848260208601610781565b91505092915050565b60006020828403121561081057600080fd5b600061081e848285016107bf565b91505092915050565b60008060006060848603121561083c57600080fd5b600061084a868287016107bf565b935050602084013567ffffffffffffffff81111561086757600080fd5b610873868287016107d4565b925050604084013567ffffffffffffffff81111561089057600080fd5b61089c868287016107d4565b9150509250925092565b6108af81610a90565b82525050565b6108be81610aa2565b82525050565b6108cd81610ad8565b82525050565b60006108de82610a74565b6108e88185610a7f565b93506108f8818560208601610b0b565b61090181610b9e565b840191505092915050565b61091581610ace565b82525050565b600060208201905061093060008301846108a6565b92915050565b600060408201905061094b60008301856108a6565b61095860208301846108a6565b9392505050565b600060208201905061097460008301846108b5565b92915050565b600060208201905061098f60008301846108c4565b92915050565b60006040820190506109aa60008301856108c4565b6109b760208301846108a6565b9392505050565b600060608201905081810360008301526109d881866108d3565b905081810360208301526109ec81856108d3565b90506109fb60408301846108a6565b949350505050565b6000602082019050610a18600083018461090c565b92915050565b6000610a28610a39565b9050610a348282610b3e565b919050565b6000604051905090565b600067ffffffffffffffff821115610a5e57610a5d610b6f565b5b610a6782610b9e565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000610a9b82610aae565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610ae382610aea565b9050919050565b6000610af582610aae565b9050919050565b82818337600083830152505050565b60005b83811015610b29578082015181840152602081019050610b0e565b83811115610b38576000848401525b50505050565b610b4782610b9e565b810181811067ffffffffffffffff82111715610b6657610b65610b6f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb881610a90565b8114610bc357600080fd5b5056fea2646970667358221220e11e20048cd79e996073dd0ae9c3e0ad5860b8c8734e6c0229d3e0500c9fa81664736f6c63430008040033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/packages/hyperverse-evm-erc721/contracts.json b/packages/hyperverse-evm-erc721/contracts.json index 69ba2409..dee11a26 100644 --- a/packages/hyperverse-evm-erc721/contracts.json +++ b/packages/hyperverse-evm-erc721/contracts.json @@ -15,8 +15,8 @@ }, "ethereum": { "testnet": { - "contractAddress": "0xF02cE0559fBD989aE9EF5E14804be360642402B4", - "factoryAddress": "0xEc72DF0fEB5E05166Ff7E6eE5FEa8469Ce867070" + "contractAddress": "0xbda251C8be7AeF3846f44eBb6c28349FFaA77b07", + "factoryAddress": "0xdc27A92D7432a30CAb36903a74531E346BcC0b14" }, "mainnet": {} }, diff --git a/packages/hyperverse-evm-erc721/contracts/ERC721.sol b/packages/hyperverse-evm-erc721/contracts/ERC721.sol index 58020dbb..d499c9c9 100644 --- a/packages/hyperverse-evm-erc721/contracts/ERC721.sol +++ b/packages/hyperverse-evm-erc721/contracts/ERC721.sol @@ -185,8 +185,8 @@ contract ERC721 is return tokenIds; } - function getBaseURI() external view returns (string memory) { - return baseURI; + function getBaseURI() public view returns (string memory) { + return bytes(baseURI).length > 0 ? baseURI : ""; } /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ T E N A N T F U N C T I O N S @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ @@ -273,7 +273,7 @@ contract ERC721 is return bytes(_tokenURIs[_tokenId]).length > 0 ? _tokenURIs[_tokenId] : ''; } - string memory baseURI_ = _baseURI(); + string memory baseURI_ = getBaseURI(); return bytes(baseURI_).length > 0 ? string(abi.encodePacked(baseURI_, _tokenId.toString())) diff --git a/packages/hyperverse-evm-erc721/test/sample-test.js b/packages/hyperverse-evm-erc721/test/sample-test.js index 9ba7003e..0458bb59 100644 --- a/packages/hyperverse-evm-erc721/test/sample-test.js +++ b/packages/hyperverse-evm-erc721/test/sample-test.js @@ -23,6 +23,9 @@ describe('ERC721', function () { await erc721factoryCtr.connect(alice).createInstance(alice.address, "ALICE", "ALC"); aliceProxyContract = await ERC721.attach(await erc721factoryCtr.getProxy(alice.address)); + + aliceProxyContract.connect(alice).initializeCollection(ethers.utils.parseEther("0.01"), 100, 5) + aliceProxyContract.connect(alice).setMintPermissions(true); }); it('Master Contract should match exampleNFTContract', async function () { @@ -32,6 +35,14 @@ describe('ERC721', function () { it("Should match alice's initial token data", async function () { expect(await aliceProxyContract.name()).to.equal('ALICE'); expect(await aliceProxyContract.symbol()).to.equal('ALC'); + + const txn = await aliceProxyContract.mint(alice.address); + const receipt = await txn.wait(); + const setURI = await aliceProxyContract.connect(alice).setBaseURI("https://example.com/"); + expect(await aliceProxyContract.getBaseURI()).to.equal("https://example.com/"); + + const tokenUri = await aliceProxyContract.connect(alice).tokenURI(1); + console.log(tokenUri) }); });