From 0017ded273dac0b63124dc6692b4c9d9a27bfefa Mon Sep 17 00:00:00 2001 From: "Abd El-Twab M. Fakhry" Date: Sat, 9 Jul 2022 00:23:13 +0200 Subject: [PATCH] Clean up --- .../contracts/storage.sol/Storage.dbg.json | 2 +- artifacts/contracts/storage.sol/Storage.json | 4 +- contracts/storage.sol | 73 ++++++++----------- pages/_app.js | 2 +- 4 files changed, 36 insertions(+), 45 deletions(-) diff --git a/artifacts/contracts/storage.sol/Storage.dbg.json b/artifacts/contracts/storage.sol/Storage.dbg.json index a2919c9..d5efb4b 100644 --- a/artifacts/contracts/storage.sol/Storage.dbg.json +++ b/artifacts/contracts/storage.sol/Storage.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/36b742c7a7077c488496f38b514e2955.json" + "buildInfo": "../../build-info/4f2e9956d5882eb50506b37c8947e10a.json" } diff --git a/artifacts/contracts/storage.sol/Storage.json b/artifacts/contracts/storage.sol/Storage.json index 3176b2a..7e52257 100644 --- a/artifacts/contracts/storage.sol/Storage.json +++ b/artifacts/contracts/storage.sol/Storage.json @@ -382,8 +382,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b506134aa806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639926b03f1161005b5780639926b03f14610139578063a3322a1214610155578063c11126e514610173578063ff24b5d51461018f57610088565b806355b1c9e11461008d5780636d429aac146100bd57806373820355146100d957806398abe80414610109575b600080fd5b6100a760048036038101906100a2919061243e565b6101ad565b6040516100b49190612b85565b60405180910390f35b6100d760048036038101906100d2919061247f565b610215565b005b6100f360048036038101906100ee919061252a565b6106ba565b6040516101009190612d80565b60405180910390f35b610123600480360381019061011e9190612553565b6109ff565b6040516101309190612b63565b60405180910390f35b610153600480360381019061014e919061252a565b610f70565b005b61015d61180c565b60405161016a9190612da2565b60405180910390f35b61018d60048036038101906101889190612402565b611855565b005b610197611ebb565b6040516101a49190612b63565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516101fd9190612ab1565b90815260200160405180910390205414159050919050565b6000845111610259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025090612ba0565b60405180910390fd5b6102008451111561029f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029690612d40565b60405180910390fd5b600083116102e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d990612c60565b60405180910390fd5b6340000000831115610329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032090612c40565b60405180910390fd5b600082511161036d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036490612d00565b60405180910390fd5b610200825111156103b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103aa90612c80565b60405180910390fd5b60008151116103f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ee90612c00565b60405180910390fd5b60006040518060c0016040528060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506104529190612f0f565b81526020018681526020018581526020018481526020018381526020014281525090506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516104c49190612ab1565b90815260200160405180910390205414156106b3576000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010190805190602001906105679291906121ca565b5060408201518160020155606082015181600301908051906020019061058e9291906121ca565b5060808201518160040190805190602001906105ab9291906121ca565b5060a0820151816005015550506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516106479190612ab1565b9081526020016040518091039020819055507f5c7876216fa5f60fc06dee2a51243dca8846c23197e7981ef8bcfcd995eb399e816000015182602001518360400151846060015185608001518660a001516040516106aa96959493929190612dbd565b60405180910390a15b5050505050565b6106c2612250565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050821115610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073d90612d20565b60405180910390fd5b60008211610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090612ca0565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836107d49190612f65565b8154811061080b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c00160405290816000820154815260200160018201805461083e90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461086a90613023565b80156108b75780601f1061088c576101008083540402835291602001916108b7565b820191906000526020600020905b81548152906001019060200180831161089a57829003601f168201915b50505050508152602001600282015481526020016003820180546108da90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461090690613023565b80156109535780601f1061092857610100808354040283529160200191610953565b820191906000526020600020905b81548152906001019060200180831161093657829003601f168201915b5050505050815260200160048201805461096c90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461099890613023565b80156109e55780601f106109ba576101008083540402835291602001916109e5565b820191906000526020600020905b8154815290600101906020018083116109c857829003601f168201915b505050505081526020016005820154815250509050919050565b606060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c90612c20565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050831115610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090612d20565b60405180910390fd5b60008311610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4390612d20565b60405180910390fd5b828211610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612cc0565b60405180910390fd5b610be58260016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610be09190612f0f565b6121ae565b915060008383610bf59190612f65565b9050600184610c049190612f65565b9350600183610c139190612f65565b925060008167ffffffffffffffff811115610c57577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c9057816020015b610c7d612250565b815260200190600190039081610c755790505b50905060008590505b84811015610f64576000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110610d17577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054610d4a90613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690613023565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b5050505050815260200160028201548152602001600382018054610de690613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1290613023565b8015610e5f5780601f10610e3457610100808354040283529160200191610e5f565b820191906000526020600020905b815481529060010190602001808311610e4257829003601f168201915b50505050508152602001600482018054610e7890613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490613023565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b50505050508152602001600582015481525050828783610f119190612f65565b81518110610f48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018190525080610f5d90613086565b9050610c99565b50809250505092915050565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811115610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90612d60565b60405180910390fd5b60008111611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90612ce0565b60405180910390fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836110849190612f65565b815481106110bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c0016040529081600082015481526020016001820180546110ee90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461111a90613023565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b505050505081526020016002820154815260200160038201805461118a90613023565b80601f01602080910402602001604051908101604052809291908181526020018280546111b690613023565b80156112035780601f106111d857610100808354040283529160200191611203565b820191906000526020600020905b8154815290600101906020018083116111e657829003601f168201915b5050505050815260200160048201805461121c90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461124890613023565b80156112955780601f1061126a57610100808354040283529160200191611295565b820191906000526020600020905b81548152906001019060200180831161127857829003601f168201915b5050505050815260200160058201548152505090506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506113369190612f65565b8154811061136d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846113c69190612f65565b815481106113fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160008201548160000155600182018160010190805461142990613023565b611434929190612286565b5060028201548160020155600382018160030190805461145390613023565b61145e929190612286565b50600482018160040190805461147390613023565b61147e929190612286565b5060058201548160050155905050816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846114d89190612f65565b8154811061150f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000181905550600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081608001516040516115759190612ab1565b908152602001604051809103902054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018561160e9190612f65565b81548110611645577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016004016040516116639190612ac8565b9081526020016040518091039020819055506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082608001516040516116c89190612ab1565b9081526020016040518091039020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061174e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020906006020160008082016000905560018201600061177b9190612313565b60028201600090556003820160006117939190612313565b6004820160006117a39190612313565b6005820160009055505090557f780c1dcbc24f58f51b26d2a6f88d0e04eb1f5f0c878956b107b7254669305e5e816000015182602001518360400151846060015185608001518660a0015160405161180096959493929190612dbd565b60405180910390a15050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905090565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508111156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d090612d60565b60405180910390fd5b6000811161191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390612ce0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612be0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290612bc0565b60405180910390fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600183611a489190612f65565b81548110611a7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054611ab290613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611ade90613023565b8015611b2b5780601f10611b0057610100808354040283529160200191611b2b565b820191906000526020600020905b815481529060010190602001808311611b0e57829003601f168201915b5050505050815260200160028201548152602001600382018054611b4e90613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7a90613023565b8015611bc75780601f10611b9c57610100808354040283529160200191611bc7565b820191906000526020600020905b815481529060010190602001808311611baa57829003601f168201915b50505050508152602001600482018054611be090613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0c90613023565b8015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b5050505050815260200160058201548152505090506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260800151604051611cc19190612ab1565b9081526020016040518091039020541415611eb6576000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060060201600090919091909150600082015181600001556020820151816001019080519060200190611d649291906121ca565b50604082015181600201556060820151816003019080519060200190611d8b9291906121ca565b506080820151816004019080519060200190611da89291906121ca565b5060a0820151816005015550506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260800151604051611e489190612ab1565b9081526020016040518091039020819055507ff25c3e6d21e8019c81fff7c875b55f146ead7b5977146dad78cc842133d1cd1283826000015183602001518460400151856060015186608001518760a00151604051611ead9796959493929190612adf565b60405180910390a15b505050565b606060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890612c20565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156121a557838290600052602060002090600602016040518060c001604052908160008201548152602001600182018054611fdc90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461200890613023565b80156120555780601f1061202a57610100808354040283529160200191612055565b820191906000526020600020905b81548152906001019060200180831161203857829003601f168201915b505050505081526020016002820154815260200160038201805461207890613023565b80601f01602080910402602001604051908101604052809291908181526020018280546120a490613023565b80156120f15780601f106120c6576101008083540402835291602001916120f1565b820191906000526020600020905b8154815290600101906020018083116120d457829003601f168201915b5050505050815260200160048201805461210a90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461213690613023565b80156121835780601f1061215857610100808354040283529160200191612183565b820191906000526020600020905b81548152906001019060200180831161216657829003601f168201915b5050505050815260200160058201548152505081526020019060010190611f9f565b50505050905090565b6000818310156121c0578290506121c4565b8190505b92915050565b8280546121d690613023565b90600052602060002090601f0160209004810192826121f8576000855561223f565b82601f1061221157805160ff191683800117855561223f565b8280016001018555821561223f579182015b8281111561223e578251825591602001919060010190612223565b5b50905061224c9190612353565b5090565b6040518060c001604052806000815260200160608152602001600081526020016060815260200160608152602001600081525090565b82805461229290613023565b90600052602060002090601f0160209004810192826122b45760008555612302565b82601f106122c55780548555612302565b8280016001018555821561230257600052602060002091601f016020900482015b828111156123015782548255916001019190600101906122e6565b5b50905061230f9190612353565b5090565b50805461231f90613023565b6000825580601f106123315750612350565b601f01602090049060005260206000209081019061234f9190612353565b5b50565b5b8082111561236c576000816000905550600101612354565b5090565b600061238361237e84612e58565b612e33565b90508281526020810184848401111561239b57600080fd5b6123a6848285612fe1565b509392505050565b6000813590506123bd81613446565b92915050565b600082601f8301126123d457600080fd5b81356123e4848260208601612370565b91505092915050565b6000813590506123fc8161345d565b92915050565b6000806040838503121561241557600080fd5b6000612423858286016123ae565b9250506020612434858286016123ed565b9150509250929050565b60006020828403121561245057600080fd5b600082013567ffffffffffffffff81111561246a57600080fd5b612476848285016123c3565b91505092915050565b6000806000806080858703121561249557600080fd5b600085013567ffffffffffffffff8111156124af57600080fd5b6124bb878288016123c3565b94505060206124cc878288016123ed565b935050604085013567ffffffffffffffff8111156124e957600080fd5b6124f5878288016123c3565b925050606085013567ffffffffffffffff81111561251257600080fd5b61251e878288016123c3565b91505092959194509250565b60006020828403121561253c57600080fd5b600061254a848285016123ed565b91505092915050565b6000806040838503121561256657600080fd5b6000612574858286016123ed565b9250506020612585858286016123ed565b9150509250929050565b600061259b8383612965565b905092915050565b6125ac81612f99565b82525050565b60006125bd82612eae565b6125c78185612ed1565b9350836020820285016125d985612e89565b8060005b8581101561261557848403895281516125f6858261258f565b945061260183612ec4565b925060208a019950506001810190506125dd565b50829750879550505050505092915050565b61263081612fab565b82525050565b600061264182612eb9565b61264b8185612ee2565b935061265b818560208601612ff0565b6126648161315c565b840191505092915050565b600061267a82612eb9565b6126848185612ef3565b9350612694818560208601612ff0565b61269d8161315c565b840191505092915050565b60006126b382612eb9565b6126bd8185612f04565b93506126cd818560208601612ff0565b80840191505092915050565b600081546126e681613023565b6126f08186612f04565b9450600182166000811461270b576001811461271c5761274f565b60ff1983168652818601935061274f565b61272585612e99565b60005b8381101561274757815481890152600182019150602081019050612728565b838801955050505b50505092915050565b6000612765601483612ef3565b91506127708261316d565b602082019050919050565b6000612788600d83612ef3565b915061279382613196565b602082019050919050565b60006127ab600c83612ef3565b91506127b6826131bf565b602082019050919050565b60006127ce601483612ef3565b91506127d9826131e8565b602082019050919050565b60006127f1600f83612ef3565b91506127fc82613211565b602082019050919050565b6000612814601c83612ef3565b915061281f8261323a565b602082019050919050565b6000612837601b83612ef3565b915061284282613263565b602082019050919050565b600061285a602983612ef3565b91506128658261328c565b604082019050919050565b600061287d601c83612ef3565b9150612888826132db565b602082019050919050565b60006128a0603783612ef3565b91506128ab82613304565b604082019050919050565b60006128c3601d83612ef3565b91506128ce82613353565b602082019050919050565b60006128e6601983612ef3565b91506128f18261337c565b602082019050919050565b6000612909601383612ef3565b9150612914826133a5565b602082019050919050565b600061292c602483612ef3565b9150612937826133ce565b604082019050919050565b600061294f601483612ef3565b915061295a8261341d565b602082019050919050565b600060c08301600083015161297d6000860182612a93565b50602083015184820360208601526129958282612636565b91505060408301516129aa6040860182612a93565b50606083015184820360608601526129c28282612636565b915050608083015184820360808601526129dc8282612636565b91505060a08301516129f160a0860182612a93565b508091505092915050565b600060c083016000830151612a146000860182612a93565b5060208301518482036020860152612a2c8282612636565b9150506040830151612a416040860182612a93565b5060608301518482036060860152612a598282612636565b91505060808301518482036080860152612a738282612636565b91505060a0830151612a8860a0860182612a93565b508091505092915050565b612a9c81612fd7565b82525050565b612aab81612fd7565b82525050565b6000612abd82846126a8565b915081905092915050565b6000612ad482846126d9565b915081905092915050565b600060e082019050612af4600083018a6125a3565b612b016020830189612aa2565b8181036040830152612b13818861266f565b9050612b226060830187612aa2565b8181036080830152612b34818661266f565b905081810360a0830152612b48818561266f565b9050612b5760c0830184612aa2565b98975050505050505050565b60006020820190508181036000830152612b7d81846125b2565b905092915050565b6000602082019050612b9a6000830184612627565b92915050565b60006020820190508181036000830152612bb981612758565b9050919050565b60006020820190508181036000830152612bd98161277b565b9050919050565b60006020820190508181036000830152612bf98161279e565b9050919050565b60006020820190508181036000830152612c19816127c1565b9050919050565b60006020820190508181036000830152612c39816127e4565b9050919050565b60006020820190508181036000830152612c5981612807565b9050919050565b60006020820190508181036000830152612c798161282a565b9050919050565b60006020820190508181036000830152612c998161284d565b9050919050565b60006020820190508181036000830152612cb981612870565b9050919050565b60006020820190508181036000830152612cd981612893565b9050919050565b60006020820190508181036000830152612cf9816128b6565b9050919050565b60006020820190508181036000830152612d19816128d9565b9050919050565b60006020820190508181036000830152612d39816128fc565b9050919050565b60006020820190508181036000830152612d598161291f565b9050919050565b60006020820190508181036000830152612d7981612942565b9050919050565b60006020820190508181036000830152612d9a81846129fc565b905092915050565b6000602082019050612db76000830184612aa2565b92915050565b600060c082019050612dd26000830189612aa2565b8181036020830152612de4818861266f565b9050612df36040830187612aa2565b8181036060830152612e05818661266f565b90508181036080830152612e19818561266f565b9050612e2860a0830184612aa2565b979650505050505050565b6000612e3d612e4e565b9050612e498282613055565b919050565b6000604051905090565b600067ffffffffffffffff821115612e7357612e7261312d565b5b612e7c8261315c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f1a82612fd7565b9150612f2583612fd7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f5a57612f596130cf565b5b828201905092915050565b6000612f7082612fd7565b9150612f7b83612fd7565b925082821015612f8e57612f8d6130cf565b5b828203905092915050565b6000612fa482612fb7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561300e578082015181840152602081019050612ff3565b8381111561301d576000848401525b50505050565b6000600282049050600182168061303b57607f821691505b6020821081141561304f5761304e6130fe565b5b50919050565b61305e8261315c565b810181811067ffffffffffffffff8211171561307d5761307c61312d565b5b80604052505050565b600061309182612fd7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130c4576130c36130cf565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4e616d652063616e6e6f7420626520656d707479000000000000000000000000600082015250565b7f4e756c6c20616464726573732100000000000000000000000000000000000000600082015250565b7f546f20796f757273656c66210000000000000000000000000000000000000000600082015250565b7f486173682063616e6e6f7420626520656d707479000000000000000000000000600082015250565b7f4e6f2066696c657320666f756e64210000000000000000000000000000000000600082015250565b7f53697a65206d757374206265206c657373207468616e20322a2a333000000000600082015250565b7f53697a65206d7573742062652067726561746572207468616e20300000000000600082015250565b7f4d696d6520747970652063616e6e6f74206265206c6f6e676572207468616e2060008201527f3531322062797465730000000000000000000000000000000000000000000000602082015250565b7f496e646578206d7573742062652067726561746572207468616e203000000000600082015250565b7f737461727420696e646578206d757374206265207374726963746c7920736d6160008201527f6c6c6572207468616e2074686520656e6420696e646578000000000000000000602082015250565b7f496e646578206d7573742062652067726561746572207468616e203021000000600082015250565b7f4d696d6520747970652063616e6e6f7420626520656d70747900000000000000600082015250565b7f496e646578206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f4e616d652063616e6e6f74206265206c6f6e676572207468616e20353132206260008201527f7974657300000000000000000000000000000000000000000000000000000000602082015250565b7f496e646578206f7574206f6620626f756e647321000000000000000000000000600082015250565b61344f81612f99565b811461345a57600080fd5b50565b61346681612fd7565b811461347157600080fd5b5056fea2646970667358221220e1298a938a791240a40da04bc0a8ff654b893a5219ce9ccb723694afef8dc46064736f6c63430008040033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80639926b03f1161005b5780639926b03f14610139578063a3322a1214610155578063c11126e514610173578063ff24b5d51461018f57610088565b806355b1c9e11461008d5780636d429aac146100bd57806373820355146100d957806398abe80414610109575b600080fd5b6100a760048036038101906100a2919061243e565b6101ad565b6040516100b49190612b85565b60405180910390f35b6100d760048036038101906100d2919061247f565b610215565b005b6100f360048036038101906100ee919061252a565b6106ba565b6040516101009190612d80565b60405180910390f35b610123600480360381019061011e9190612553565b6109ff565b6040516101309190612b63565b60405180910390f35b610153600480360381019061014e919061252a565b610f70565b005b61015d61180c565b60405161016a9190612da2565b60405180910390f35b61018d60048036038101906101889190612402565b611855565b005b610197611ebb565b6040516101a49190612b63565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516101fd9190612ab1565b90815260200160405180910390205414159050919050565b6000845111610259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025090612ba0565b60405180910390fd5b6102008451111561029f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029690612d40565b60405180910390fd5b600083116102e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d990612c60565b60405180910390fd5b6340000000831115610329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032090612c40565b60405180910390fd5b600082511161036d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036490612d00565b60405180910390fd5b610200825111156103b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103aa90612c80565b60405180910390fd5b60008151116103f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ee90612c00565b60405180910390fd5b60006040518060c0016040528060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506104529190612f0f565b81526020018681526020018581526020018481526020018381526020014281525090506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516104c49190612ab1565b90815260200160405180910390205414156106b3576000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010190805190602001906105679291906121ca565b5060408201518160020155606082015181600301908051906020019061058e9291906121ca565b5060808201518160040190805190602001906105ab9291906121ca565b5060a0820151816005015550506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516106479190612ab1565b9081526020016040518091039020819055507f5c7876216fa5f60fc06dee2a51243dca8846c23197e7981ef8bcfcd995eb399e816000015182602001518360400151846060015185608001518660a001516040516106aa96959493929190612dbd565b60405180910390a15b5050505050565b6106c2612250565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050821115610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073d90612d20565b60405180910390fd5b60008211610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090612ca0565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836107d49190612f65565b8154811061080b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c00160405290816000820154815260200160018201805461083e90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461086a90613023565b80156108b75780601f1061088c576101008083540402835291602001916108b7565b820191906000526020600020905b81548152906001019060200180831161089a57829003601f168201915b50505050508152602001600282015481526020016003820180546108da90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461090690613023565b80156109535780601f1061092857610100808354040283529160200191610953565b820191906000526020600020905b81548152906001019060200180831161093657829003601f168201915b5050505050815260200160048201805461096c90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461099890613023565b80156109e55780601f106109ba576101008083540402835291602001916109e5565b820191906000526020600020905b8154815290600101906020018083116109c857829003601f168201915b505050505081526020016005820154815250509050919050565b606060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c90612c20565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050831115610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090612d20565b60405180910390fd5b60008311610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4390612d20565b60405180910390fd5b828211610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612cc0565b60405180910390fd5b610be58260016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610be09190612f0f565b6121ae565b915060008383610bf59190612f65565b9050600184610c049190612f65565b9350600183610c139190612f65565b925060008167ffffffffffffffff811115610c57577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c9057816020015b610c7d612250565b815260200190600190039081610c755790505b50905060008590505b84811015610f64576000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110610d17577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054610d4a90613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690613023565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b5050505050815260200160028201548152602001600382018054610de690613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1290613023565b8015610e5f5780601f10610e3457610100808354040283529160200191610e5f565b820191906000526020600020905b815481529060010190602001808311610e4257829003601f168201915b50505050508152602001600482018054610e7890613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490613023565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b50505050508152602001600582015481525050828783610f119190612f65565b81518110610f48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018190525080610f5d90613086565b9050610c99565b50809250505092915050565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811115610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90612d60565b60405180910390fd5b60008111611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90612ce0565b60405180910390fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836110849190612f65565b815481106110bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c0016040529081600082015481526020016001820180546110ee90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461111a90613023565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b505050505081526020016002820154815260200160038201805461118a90613023565b80601f01602080910402602001604051908101604052809291908181526020018280546111b690613023565b80156112035780601f106111d857610100808354040283529160200191611203565b820191906000526020600020905b8154815290600101906020018083116111e657829003601f168201915b5050505050815260200160048201805461121c90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461124890613023565b80156112955780601f1061126a57610100808354040283529160200191611295565b820191906000526020600020905b81548152906001019060200180831161127857829003601f168201915b5050505050815260200160058201548152505090506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506113369190612f65565b8154811061136d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846113c69190612f65565b815481106113fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160008201548160000155600182018160010190805461142990613023565b611434929190612286565b5060028201548160020155600382018160030190805461145390613023565b61145e929190612286565b50600482018160040190805461147390613023565b61147e929190612286565b5060058201548160050155905050816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846114d89190612f65565b8154811061150f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000181905550600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081608001516040516115759190612ab1565b908152602001604051809103902054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018561160e9190612f65565b81548110611645577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016004016040516116639190612ac8565b9081526020016040518091039020819055506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082608001516040516116c89190612ab1565b9081526020016040518091039020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061174e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020906006020160008082016000905560018201600061177b9190612313565b60028201600090556003820160006117939190612313565b6004820160006117a39190612313565b6005820160009055505090557f780c1dcbc24f58f51b26d2a6f88d0e04eb1f5f0c878956b107b7254669305e5e816000015182602001518360400151846060015185608001518660a0015160405161180096959493929190612dbd565b60405180910390a15050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905090565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508111156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d090612d60565b60405180910390fd5b6000811161191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390612ce0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612be0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290612bc0565b60405180910390fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600183611a489190612f65565b81548110611a7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054611ab290613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611ade90613023565b8015611b2b5780601f10611b0057610100808354040283529160200191611b2b565b820191906000526020600020905b815481529060010190602001808311611b0e57829003601f168201915b5050505050815260200160028201548152602001600382018054611b4e90613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7a90613023565b8015611bc75780601f10611b9c57610100808354040283529160200191611bc7565b820191906000526020600020905b815481529060010190602001808311611baa57829003601f168201915b50505050508152602001600482018054611be090613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0c90613023565b8015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b5050505050815260200160058201548152505090506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260800151604051611cc19190612ab1565b9081526020016040518091039020541415611eb6576000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060060201600090919091909150600082015181600001556020820151816001019080519060200190611d649291906121ca565b50604082015181600201556060820151816003019080519060200190611d8b9291906121ca565b506080820151816004019080519060200190611da89291906121ca565b5060a0820151816005015550506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260800151604051611e489190612ab1565b9081526020016040518091039020819055507ff25c3e6d21e8019c81fff7c875b55f146ead7b5977146dad78cc842133d1cd1283826000015183602001518460400151856060015186608001518760a00151604051611ead9796959493929190612adf565b60405180910390a15b505050565b606060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890612c20565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156121a557838290600052602060002090600602016040518060c001604052908160008201548152602001600182018054611fdc90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461200890613023565b80156120555780601f1061202a57610100808354040283529160200191612055565b820191906000526020600020905b81548152906001019060200180831161203857829003601f168201915b505050505081526020016002820154815260200160038201805461207890613023565b80601f01602080910402602001604051908101604052809291908181526020018280546120a490613023565b80156120f15780601f106120c6576101008083540402835291602001916120f1565b820191906000526020600020905b8154815290600101906020018083116120d457829003601f168201915b5050505050815260200160048201805461210a90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461213690613023565b80156121835780601f1061215857610100808354040283529160200191612183565b820191906000526020600020905b81548152906001019060200180831161216657829003601f168201915b5050505050815260200160058201548152505081526020019060010190611f9f565b50505050905090565b6000818310156121c0578290506121c4565b8190505b92915050565b8280546121d690613023565b90600052602060002090601f0160209004810192826121f8576000855561223f565b82601f1061221157805160ff191683800117855561223f565b8280016001018555821561223f579182015b8281111561223e578251825591602001919060010190612223565b5b50905061224c9190612353565b5090565b6040518060c001604052806000815260200160608152602001600081526020016060815260200160608152602001600081525090565b82805461229290613023565b90600052602060002090601f0160209004810192826122b45760008555612302565b82601f106122c55780548555612302565b8280016001018555821561230257600052602060002091601f016020900482015b828111156123015782548255916001019190600101906122e6565b5b50905061230f9190612353565b5090565b50805461231f90613023565b6000825580601f106123315750612350565b601f01602090049060005260206000209081019061234f9190612353565b5b50565b5b8082111561236c576000816000905550600101612354565b5090565b600061238361237e84612e58565b612e33565b90508281526020810184848401111561239b57600080fd5b6123a6848285612fe1565b509392505050565b6000813590506123bd81613446565b92915050565b600082601f8301126123d457600080fd5b81356123e4848260208601612370565b91505092915050565b6000813590506123fc8161345d565b92915050565b6000806040838503121561241557600080fd5b6000612423858286016123ae565b9250506020612434858286016123ed565b9150509250929050565b60006020828403121561245057600080fd5b600082013567ffffffffffffffff81111561246a57600080fd5b612476848285016123c3565b91505092915050565b6000806000806080858703121561249557600080fd5b600085013567ffffffffffffffff8111156124af57600080fd5b6124bb878288016123c3565b94505060206124cc878288016123ed565b935050604085013567ffffffffffffffff8111156124e957600080fd5b6124f5878288016123c3565b925050606085013567ffffffffffffffff81111561251257600080fd5b61251e878288016123c3565b91505092959194509250565b60006020828403121561253c57600080fd5b600061254a848285016123ed565b91505092915050565b6000806040838503121561256657600080fd5b6000612574858286016123ed565b9250506020612585858286016123ed565b9150509250929050565b600061259b8383612965565b905092915050565b6125ac81612f99565b82525050565b60006125bd82612eae565b6125c78185612ed1565b9350836020820285016125d985612e89565b8060005b8581101561261557848403895281516125f6858261258f565b945061260183612ec4565b925060208a019950506001810190506125dd565b50829750879550505050505092915050565b61263081612fab565b82525050565b600061264182612eb9565b61264b8185612ee2565b935061265b818560208601612ff0565b6126648161315c565b840191505092915050565b600061267a82612eb9565b6126848185612ef3565b9350612694818560208601612ff0565b61269d8161315c565b840191505092915050565b60006126b382612eb9565b6126bd8185612f04565b93506126cd818560208601612ff0565b80840191505092915050565b600081546126e681613023565b6126f08186612f04565b9450600182166000811461270b576001811461271c5761274f565b60ff1983168652818601935061274f565b61272585612e99565b60005b8381101561274757815481890152600182019150602081019050612728565b838801955050505b50505092915050565b6000612765601483612ef3565b91506127708261316d565b602082019050919050565b6000612788600d83612ef3565b915061279382613196565b602082019050919050565b60006127ab600c83612ef3565b91506127b6826131bf565b602082019050919050565b60006127ce601483612ef3565b91506127d9826131e8565b602082019050919050565b60006127f1600f83612ef3565b91506127fc82613211565b602082019050919050565b6000612814601c83612ef3565b915061281f8261323a565b602082019050919050565b6000612837601b83612ef3565b915061284282613263565b602082019050919050565b600061285a602983612ef3565b91506128658261328c565b604082019050919050565b600061287d601c83612ef3565b9150612888826132db565b602082019050919050565b60006128a0603783612ef3565b91506128ab82613304565b604082019050919050565b60006128c3601d83612ef3565b91506128ce82613353565b602082019050919050565b60006128e6601983612ef3565b91506128f18261337c565b602082019050919050565b6000612909601383612ef3565b9150612914826133a5565b602082019050919050565b600061292c602483612ef3565b9150612937826133ce565b604082019050919050565b600061294f601483612ef3565b915061295a8261341d565b602082019050919050565b600060c08301600083015161297d6000860182612a93565b50602083015184820360208601526129958282612636565b91505060408301516129aa6040860182612a93565b50606083015184820360608601526129c28282612636565b915050608083015184820360808601526129dc8282612636565b91505060a08301516129f160a0860182612a93565b508091505092915050565b600060c083016000830151612a146000860182612a93565b5060208301518482036020860152612a2c8282612636565b9150506040830151612a416040860182612a93565b5060608301518482036060860152612a598282612636565b91505060808301518482036080860152612a738282612636565b91505060a0830151612a8860a0860182612a93565b508091505092915050565b612a9c81612fd7565b82525050565b612aab81612fd7565b82525050565b6000612abd82846126a8565b915081905092915050565b6000612ad482846126d9565b915081905092915050565b600060e082019050612af4600083018a6125a3565b612b016020830189612aa2565b8181036040830152612b13818861266f565b9050612b226060830187612aa2565b8181036080830152612b34818661266f565b905081810360a0830152612b48818561266f565b9050612b5760c0830184612aa2565b98975050505050505050565b60006020820190508181036000830152612b7d81846125b2565b905092915050565b6000602082019050612b9a6000830184612627565b92915050565b60006020820190508181036000830152612bb981612758565b9050919050565b60006020820190508181036000830152612bd98161277b565b9050919050565b60006020820190508181036000830152612bf98161279e565b9050919050565b60006020820190508181036000830152612c19816127c1565b9050919050565b60006020820190508181036000830152612c39816127e4565b9050919050565b60006020820190508181036000830152612c5981612807565b9050919050565b60006020820190508181036000830152612c798161282a565b9050919050565b60006020820190508181036000830152612c998161284d565b9050919050565b60006020820190508181036000830152612cb981612870565b9050919050565b60006020820190508181036000830152612cd981612893565b9050919050565b60006020820190508181036000830152612cf9816128b6565b9050919050565b60006020820190508181036000830152612d19816128d9565b9050919050565b60006020820190508181036000830152612d39816128fc565b9050919050565b60006020820190508181036000830152612d598161291f565b9050919050565b60006020820190508181036000830152612d7981612942565b9050919050565b60006020820190508181036000830152612d9a81846129fc565b905092915050565b6000602082019050612db76000830184612aa2565b92915050565b600060c082019050612dd26000830189612aa2565b8181036020830152612de4818861266f565b9050612df36040830187612aa2565b8181036060830152612e05818661266f565b90508181036080830152612e19818561266f565b9050612e2860a0830184612aa2565b979650505050505050565b6000612e3d612e4e565b9050612e498282613055565b919050565b6000604051905090565b600067ffffffffffffffff821115612e7357612e7261312d565b5b612e7c8261315c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f1a82612fd7565b9150612f2583612fd7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f5a57612f596130cf565b5b828201905092915050565b6000612f7082612fd7565b9150612f7b83612fd7565b925082821015612f8e57612f8d6130cf565b5b828203905092915050565b6000612fa482612fb7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561300e578082015181840152602081019050612ff3565b8381111561301d576000848401525b50505050565b6000600282049050600182168061303b57607f821691505b6020821081141561304f5761304e6130fe565b5b50919050565b61305e8261315c565b810181811067ffffffffffffffff8211171561307d5761307c61312d565b5b80604052505050565b600061309182612fd7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130c4576130c36130cf565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4e616d652063616e6e6f7420626520656d707479000000000000000000000000600082015250565b7f4e756c6c20616464726573732100000000000000000000000000000000000000600082015250565b7f546f20796f757273656c66210000000000000000000000000000000000000000600082015250565b7f486173682063616e6e6f7420626520656d707479000000000000000000000000600082015250565b7f4e6f2066696c657320666f756e64210000000000000000000000000000000000600082015250565b7f53697a65206d757374206265206c657373207468616e20322a2a333000000000600082015250565b7f53697a65206d7573742062652067726561746572207468616e20300000000000600082015250565b7f4d696d6520747970652063616e6e6f74206265206c6f6e676572207468616e2060008201527f3531322062797465730000000000000000000000000000000000000000000000602082015250565b7f496e646578206d7573742062652067726561746572207468616e203000000000600082015250565b7f737461727420696e646578206d757374206265207374726963746c7920736d6160008201527f6c6c6572207468616e2074686520656e6420696e646578000000000000000000602082015250565b7f496e646578206d7573742062652067726561746572207468616e203021000000600082015250565b7f4d696d6520747970652063616e6e6f7420626520656d70747900000000000000600082015250565b7f496e646578206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f4e616d652063616e6e6f74206265206c6f6e676572207468616e20353132206260008201527f7974657300000000000000000000000000000000000000000000000000000000602082015250565b7f496e646578206f7574206f6620626f756e647321000000000000000000000000600082015250565b61344f81612f99565b811461345a57600080fd5b50565b61346681612fd7565b811461347157600080fd5b5056fea2646970667358221220e1298a938a791240a40da04bc0a8ff654b893a5219ce9ccb723694afef8dc46064736f6c63430008040033", + "bytecode": "0x608060405234801561001057600080fd5b506134aa806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639926b03f1161005b5780639926b03f14610139578063a3322a1214610155578063c11126e514610173578063ff24b5d51461018f57610088565b806355b1c9e11461008d5780636d429aac146100bd57806373820355146100d957806398abe80414610109575b600080fd5b6100a760048036038101906100a2919061243e565b6101ad565b6040516100b49190612b85565b60405180910390f35b6100d760048036038101906100d2919061247f565b610215565b005b6100f360048036038101906100ee919061252a565b6106ba565b6040516101009190612d80565b60405180910390f35b610123600480360381019061011e9190612553565b6109ff565b6040516101309190612b63565b60405180910390f35b610153600480360381019061014e919061252a565b610f70565b005b61015d61180c565b60405161016a9190612da2565b60405180910390f35b61018d60048036038101906101889190612402565b611855565b005b610197611ebb565b6040516101a49190612b63565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516101fd9190612ab1565b90815260200160405180910390205414159050919050565b6000845111610259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025090612ba0565b60405180910390fd5b6102008451111561029f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029690612d40565b60405180910390fd5b600083116102e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d990612c60565b60405180910390fd5b6340000000831115610329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032090612c40565b60405180910390fd5b600082511161036d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036490612d00565b60405180910390fd5b610200825111156103b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103aa90612c80565b60405180910390fd5b60008151116103f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ee90612c00565b60405180910390fd5b60006040518060c0016040528060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506104529190612f0f565b81526020018681526020018581526020018481526020018381526020014281525090506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516104c49190612ab1565b90815260200160405180910390205414156106b3576000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010190805190602001906105679291906121ca565b5060408201518160020155606082015181600301908051906020019061058e9291906121ca565b5060808201518160040190805190602001906105ab9291906121ca565b5060a0820151816005015550506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516106479190612ab1565b9081526020016040518091039020819055507f5c7876216fa5f60fc06dee2a51243dca8846c23197e7981ef8bcfcd995eb399e816000015182602001518360400151846060015185608001518660a001516040516106aa96959493929190612dbd565b60405180910390a15b5050505050565b6106c2612250565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050821115610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073d90612d20565b60405180910390fd5b60008211610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090612ca0565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836107d49190612f65565b8154811061080b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c00160405290816000820154815260200160018201805461083e90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461086a90613023565b80156108b75780601f1061088c576101008083540402835291602001916108b7565b820191906000526020600020905b81548152906001019060200180831161089a57829003601f168201915b50505050508152602001600282015481526020016003820180546108da90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461090690613023565b80156109535780601f1061092857610100808354040283529160200191610953565b820191906000526020600020905b81548152906001019060200180831161093657829003601f168201915b5050505050815260200160048201805461096c90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461099890613023565b80156109e55780601f106109ba576101008083540402835291602001916109e5565b820191906000526020600020905b8154815290600101906020018083116109c857829003601f168201915b505050505081526020016005820154815250509050919050565b606060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c90612c20565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050831115610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090612d20565b60405180910390fd5b60008311610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4390612d20565b60405180910390fd5b828211610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612cc0565b60405180910390fd5b610be58260016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610be09190612f0f565b6121ae565b915060008383610bf59190612f65565b9050600184610c049190612f65565b9350600183610c139190612f65565b925060008167ffffffffffffffff811115610c57577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c9057816020015b610c7d612250565b815260200190600190039081610c755790505b50905060008590505b84811015610f64576000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110610d17577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054610d4a90613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690613023565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b5050505050815260200160028201548152602001600382018054610de690613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1290613023565b8015610e5f5780601f10610e3457610100808354040283529160200191610e5f565b820191906000526020600020905b815481529060010190602001808311610e4257829003601f168201915b50505050508152602001600482018054610e7890613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490613023565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b50505050508152602001600582015481525050828783610f119190612f65565b81518110610f48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018190525080610f5d90613086565b9050610c99565b50809250505092915050565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811115610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90612d60565b60405180910390fd5b60008111611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90612ce0565b60405180910390fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836110849190612f65565b815481106110bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c0016040529081600082015481526020016001820180546110ee90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461111a90613023565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b505050505081526020016002820154815260200160038201805461118a90613023565b80601f01602080910402602001604051908101604052809291908181526020018280546111b690613023565b80156112035780601f106111d857610100808354040283529160200191611203565b820191906000526020600020905b8154815290600101906020018083116111e657829003601f168201915b5050505050815260200160048201805461121c90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461124890613023565b80156112955780601f1061126a57610100808354040283529160200191611295565b820191906000526020600020905b81548152906001019060200180831161127857829003601f168201915b5050505050815260200160058201548152505090506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506113369190612f65565b8154811061136d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846113c69190612f65565b815481106113fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160008201548160000155600182018160010190805461142990613023565b611434929190612286565b5060028201548160020155600382018160030190805461145390613023565b61145e929190612286565b50600482018160040190805461147390613023565b61147e929190612286565b5060058201548160050155905050816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846114d89190612f65565b8154811061150f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000181905550600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081608001516040516115759190612ab1565b908152602001604051809103902054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018561160e9190612f65565b81548110611645577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016004016040516116639190612ac8565b9081526020016040518091039020819055506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082608001516040516116c89190612ab1565b9081526020016040518091039020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061174e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020906006020160008082016000905560018201600061177b9190612313565b60028201600090556003820160006117939190612313565b6004820160006117a39190612313565b6005820160009055505090557f780c1dcbc24f58f51b26d2a6f88d0e04eb1f5f0c878956b107b7254669305e5e816000015182602001518360400151846060015185608001518660a0015160405161180096959493929190612dbd565b60405180910390a15050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905090565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508111156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d090612d60565b60405180910390fd5b6000811161191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390612ce0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612be0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290612bc0565b60405180910390fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600183611a489190612f65565b81548110611a7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054611ab290613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611ade90613023565b8015611b2b5780601f10611b0057610100808354040283529160200191611b2b565b820191906000526020600020905b815481529060010190602001808311611b0e57829003601f168201915b5050505050815260200160028201548152602001600382018054611b4e90613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7a90613023565b8015611bc75780601f10611b9c57610100808354040283529160200191611bc7565b820191906000526020600020905b815481529060010190602001808311611baa57829003601f168201915b50505050508152602001600482018054611be090613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0c90613023565b8015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b5050505050815260200160058201548152505090506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260800151604051611cc19190612ab1565b9081526020016040518091039020541415611eb6576000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060060201600090919091909150600082015181600001556020820151816001019080519060200190611d649291906121ca565b50604082015181600201556060820151816003019080519060200190611d8b9291906121ca565b506080820151816004019080519060200190611da89291906121ca565b5060a0820151816005015550506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260800151604051611e489190612ab1565b9081526020016040518091039020819055507ff25c3e6d21e8019c81fff7c875b55f146ead7b5977146dad78cc842133d1cd1283826000015183602001518460400151856060015186608001518760a00151604051611ead9796959493929190612adf565b60405180910390a15b505050565b606060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890612c20565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156121a557838290600052602060002090600602016040518060c001604052908160008201548152602001600182018054611fdc90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461200890613023565b80156120555780601f1061202a57610100808354040283529160200191612055565b820191906000526020600020905b81548152906001019060200180831161203857829003601f168201915b505050505081526020016002820154815260200160038201805461207890613023565b80601f01602080910402602001604051908101604052809291908181526020018280546120a490613023565b80156120f15780601f106120c6576101008083540402835291602001916120f1565b820191906000526020600020905b8154815290600101906020018083116120d457829003601f168201915b5050505050815260200160048201805461210a90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461213690613023565b80156121835780601f1061215857610100808354040283529160200191612183565b820191906000526020600020905b81548152906001019060200180831161216657829003601f168201915b5050505050815260200160058201548152505081526020019060010190611f9f565b50505050905090565b6000818310156121c0578290506121c4565b8190505b92915050565b8280546121d690613023565b90600052602060002090601f0160209004810192826121f8576000855561223f565b82601f1061221157805160ff191683800117855561223f565b8280016001018555821561223f579182015b8281111561223e578251825591602001919060010190612223565b5b50905061224c9190612353565b5090565b6040518060c001604052806000815260200160608152602001600081526020016060815260200160608152602001600081525090565b82805461229290613023565b90600052602060002090601f0160209004810192826122b45760008555612302565b82601f106122c55780548555612302565b8280016001018555821561230257600052602060002091601f016020900482015b828111156123015782548255916001019190600101906122e6565b5b50905061230f9190612353565b5090565b50805461231f90613023565b6000825580601f106123315750612350565b601f01602090049060005260206000209081019061234f9190612353565b5b50565b5b8082111561236c576000816000905550600101612354565b5090565b600061238361237e84612e58565b612e33565b90508281526020810184848401111561239b57600080fd5b6123a6848285612fe1565b509392505050565b6000813590506123bd81613446565b92915050565b600082601f8301126123d457600080fd5b81356123e4848260208601612370565b91505092915050565b6000813590506123fc8161345d565b92915050565b6000806040838503121561241557600080fd5b6000612423858286016123ae565b9250506020612434858286016123ed565b9150509250929050565b60006020828403121561245057600080fd5b600082013567ffffffffffffffff81111561246a57600080fd5b612476848285016123c3565b91505092915050565b6000806000806080858703121561249557600080fd5b600085013567ffffffffffffffff8111156124af57600080fd5b6124bb878288016123c3565b94505060206124cc878288016123ed565b935050604085013567ffffffffffffffff8111156124e957600080fd5b6124f5878288016123c3565b925050606085013567ffffffffffffffff81111561251257600080fd5b61251e878288016123c3565b91505092959194509250565b60006020828403121561253c57600080fd5b600061254a848285016123ed565b91505092915050565b6000806040838503121561256657600080fd5b6000612574858286016123ed565b9250506020612585858286016123ed565b9150509250929050565b600061259b8383612965565b905092915050565b6125ac81612f99565b82525050565b60006125bd82612eae565b6125c78185612ed1565b9350836020820285016125d985612e89565b8060005b8581101561261557848403895281516125f6858261258f565b945061260183612ec4565b925060208a019950506001810190506125dd565b50829750879550505050505092915050565b61263081612fab565b82525050565b600061264182612eb9565b61264b8185612ee2565b935061265b818560208601612ff0565b6126648161315c565b840191505092915050565b600061267a82612eb9565b6126848185612ef3565b9350612694818560208601612ff0565b61269d8161315c565b840191505092915050565b60006126b382612eb9565b6126bd8185612f04565b93506126cd818560208601612ff0565b80840191505092915050565b600081546126e681613023565b6126f08186612f04565b9450600182166000811461270b576001811461271c5761274f565b60ff1983168652818601935061274f565b61272585612e99565b60005b8381101561274757815481890152600182019150602081019050612728565b838801955050505b50505092915050565b6000612765601483612ef3565b91506127708261316d565b602082019050919050565b6000612788600d83612ef3565b915061279382613196565b602082019050919050565b60006127ab600c83612ef3565b91506127b6826131bf565b602082019050919050565b60006127ce601483612ef3565b91506127d9826131e8565b602082019050919050565b60006127f1600f83612ef3565b91506127fc82613211565b602082019050919050565b6000612814601c83612ef3565b915061281f8261323a565b602082019050919050565b6000612837601b83612ef3565b915061284282613263565b602082019050919050565b600061285a602983612ef3565b91506128658261328c565b604082019050919050565b600061287d601c83612ef3565b9150612888826132db565b602082019050919050565b60006128a0603783612ef3565b91506128ab82613304565b604082019050919050565b60006128c3601d83612ef3565b91506128ce82613353565b602082019050919050565b60006128e6601983612ef3565b91506128f18261337c565b602082019050919050565b6000612909601383612ef3565b9150612914826133a5565b602082019050919050565b600061292c602483612ef3565b9150612937826133ce565b604082019050919050565b600061294f601483612ef3565b915061295a8261341d565b602082019050919050565b600060c08301600083015161297d6000860182612a93565b50602083015184820360208601526129958282612636565b91505060408301516129aa6040860182612a93565b50606083015184820360608601526129c28282612636565b915050608083015184820360808601526129dc8282612636565b91505060a08301516129f160a0860182612a93565b508091505092915050565b600060c083016000830151612a146000860182612a93565b5060208301518482036020860152612a2c8282612636565b9150506040830151612a416040860182612a93565b5060608301518482036060860152612a598282612636565b91505060808301518482036080860152612a738282612636565b91505060a0830151612a8860a0860182612a93565b508091505092915050565b612a9c81612fd7565b82525050565b612aab81612fd7565b82525050565b6000612abd82846126a8565b915081905092915050565b6000612ad482846126d9565b915081905092915050565b600060e082019050612af4600083018a6125a3565b612b016020830189612aa2565b8181036040830152612b13818861266f565b9050612b226060830187612aa2565b8181036080830152612b34818661266f565b905081810360a0830152612b48818561266f565b9050612b5760c0830184612aa2565b98975050505050505050565b60006020820190508181036000830152612b7d81846125b2565b905092915050565b6000602082019050612b9a6000830184612627565b92915050565b60006020820190508181036000830152612bb981612758565b9050919050565b60006020820190508181036000830152612bd98161277b565b9050919050565b60006020820190508181036000830152612bf98161279e565b9050919050565b60006020820190508181036000830152612c19816127c1565b9050919050565b60006020820190508181036000830152612c39816127e4565b9050919050565b60006020820190508181036000830152612c5981612807565b9050919050565b60006020820190508181036000830152612c798161282a565b9050919050565b60006020820190508181036000830152612c998161284d565b9050919050565b60006020820190508181036000830152612cb981612870565b9050919050565b60006020820190508181036000830152612cd981612893565b9050919050565b60006020820190508181036000830152612cf9816128b6565b9050919050565b60006020820190508181036000830152612d19816128d9565b9050919050565b60006020820190508181036000830152612d39816128fc565b9050919050565b60006020820190508181036000830152612d598161291f565b9050919050565b60006020820190508181036000830152612d7981612942565b9050919050565b60006020820190508181036000830152612d9a81846129fc565b905092915050565b6000602082019050612db76000830184612aa2565b92915050565b600060c082019050612dd26000830189612aa2565b8181036020830152612de4818861266f565b9050612df36040830187612aa2565b8181036060830152612e05818661266f565b90508181036080830152612e19818561266f565b9050612e2860a0830184612aa2565b979650505050505050565b6000612e3d612e4e565b9050612e498282613055565b919050565b6000604051905090565b600067ffffffffffffffff821115612e7357612e7261312d565b5b612e7c8261315c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f1a82612fd7565b9150612f2583612fd7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f5a57612f596130cf565b5b828201905092915050565b6000612f7082612fd7565b9150612f7b83612fd7565b925082821015612f8e57612f8d6130cf565b5b828203905092915050565b6000612fa482612fb7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561300e578082015181840152602081019050612ff3565b8381111561301d576000848401525b50505050565b6000600282049050600182168061303b57607f821691505b6020821081141561304f5761304e6130fe565b5b50919050565b61305e8261315c565b810181811067ffffffffffffffff8211171561307d5761307c61312d565b5b80604052505050565b600061309182612fd7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130c4576130c36130cf565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4e616d652063616e6e6f7420626520656d707479000000000000000000000000600082015250565b7f4e756c6c20616464726573732100000000000000000000000000000000000000600082015250565b7f546f20796f757273656c66210000000000000000000000000000000000000000600082015250565b7f486173682063616e6e6f7420626520656d707479000000000000000000000000600082015250565b7f4e6f2066696c657320666f756e64210000000000000000000000000000000000600082015250565b7f53697a65206d757374206265206c657373207468616e20322a2a333000000000600082015250565b7f53697a65206d7573742062652067726561746572207468616e20300000000000600082015250565b7f4d696d6520747970652063616e6e6f74206265206c6f6e676572207468616e2060008201527f3531322062797465730000000000000000000000000000000000000000000000602082015250565b7f496e646578206d7573742062652067726561746572207468616e203000000000600082015250565b7f737461727420696e646578206d757374206265207374726963746c7920736d6160008201527f6c6c6572207468616e2074686520656e6420696e646578000000000000000000602082015250565b7f496e646578206d7573742062652067726561746572207468616e203021000000600082015250565b7f4d696d6520747970652063616e6e6f7420626520656d70747900000000000000600082015250565b7f496e646578206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f4e616d652063616e6e6f74206265206c6f6e676572207468616e20353132206260008201527f7974657300000000000000000000000000000000000000000000000000000000602082015250565b7f496e646578206f7574206f6620626f756e647321000000000000000000000000600082015250565b61344f81612f99565b811461345a57600080fd5b50565b61346681612fd7565b811461347157600080fd5b5056fea264697066735822122095d2fe07cb8c778a7f79e6da4ca246ade12ac5c74b2e4dac629a25b879b9feeb64736f6c63430008040033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80639926b03f1161005b5780639926b03f14610139578063a3322a1214610155578063c11126e514610173578063ff24b5d51461018f57610088565b806355b1c9e11461008d5780636d429aac146100bd57806373820355146100d957806398abe80414610109575b600080fd5b6100a760048036038101906100a2919061243e565b6101ad565b6040516100b49190612b85565b60405180910390f35b6100d760048036038101906100d2919061247f565b610215565b005b6100f360048036038101906100ee919061252a565b6106ba565b6040516101009190612d80565b60405180910390f35b610123600480360381019061011e9190612553565b6109ff565b6040516101309190612b63565b60405180910390f35b610153600480360381019061014e919061252a565b610f70565b005b61015d61180c565b60405161016a9190612da2565b60405180910390f35b61018d60048036038101906101889190612402565b611855565b005b610197611ebb565b6040516101a49190612b63565b60405180910390f35b600080600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516101fd9190612ab1565b90815260200160405180910390205414159050919050565b6000845111610259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025090612ba0565b60405180910390fd5b6102008451111561029f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029690612d40565b60405180910390fd5b600083116102e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d990612c60565b60405180910390fd5b6340000000831115610329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032090612c40565b60405180910390fd5b600082511161036d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036490612d00565b60405180910390fd5b610200825111156103b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103aa90612c80565b60405180910390fd5b60008151116103f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ee90612c00565b60405180910390fd5b60006040518060c0016040528060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506104529190612f0f565b81526020018681526020018581526020018481526020018381526020014281525090506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516104c49190612ab1565b90815260200160405180910390205414156106b3576000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000015560208201518160010190805190602001906105679291906121ca565b5060408201518160020155606082015181600301908051906020019061058e9291906121ca565b5060808201518160040190805190602001906105ab9291906121ca565b5060a0820151816005015550506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836040516106479190612ab1565b9081526020016040518091039020819055507f5c7876216fa5f60fc06dee2a51243dca8846c23197e7981ef8bcfcd995eb399e816000015182602001518360400151846060015185608001518660a001516040516106aa96959493929190612dbd565b60405180910390a15b5050505050565b6106c2612250565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050821115610746576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073d90612d20565b60405180910390fd5b60008211610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090612ca0565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836107d49190612f65565b8154811061080b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c00160405290816000820154815260200160018201805461083e90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461086a90613023565b80156108b75780601f1061088c576101008083540402835291602001916108b7565b820191906000526020600020905b81548152906001019060200180831161089a57829003601f168201915b50505050508152602001600282015481526020016003820180546108da90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461090690613023565b80156109535780601f1061092857610100808354040283529160200191610953565b820191906000526020600020905b81548152906001019060200180831161093657829003601f168201915b5050505050815260200160048201805461096c90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461099890613023565b80156109e55780601f106109ba576101008083540402835291602001916109e5565b820191906000526020600020905b8154815290600101906020018083116109c857829003601f168201915b505050505081526020016005820154815250509050919050565b606060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011610a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7c90612c20565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050831115610b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0090612d20565b60405180910390fd5b60008311610b4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4390612d20565b60405180910390fd5b828211610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612cc0565b60405180910390fd5b610be58260016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050610be09190612f0f565b6121ae565b915060008383610bf59190612f65565b9050600184610c049190612f65565b9350600183610c139190612f65565b925060008167ffffffffffffffff811115610c57577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610c9057816020015b610c7d612250565b815260200190600190039081610c755790505b50905060008590505b84811015610f64576000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208181548110610d17577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054610d4a90613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7690613023565b8015610dc35780601f10610d9857610100808354040283529160200191610dc3565b820191906000526020600020905b815481529060010190602001808311610da657829003601f168201915b5050505050815260200160028201548152602001600382018054610de690613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1290613023565b8015610e5f5780601f10610e3457610100808354040283529160200191610e5f565b820191906000526020600020905b815481529060010190602001808311610e4257829003601f168201915b50505050508152602001600482018054610e7890613023565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490613023565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b50505050508152602001600582015481525050828783610f119190612f65565b81518110610f48577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018190525080610f5d90613086565b9050610c99565b50809250505092915050565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050811115610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90612d60565b60405180910390fd5b60008111611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90612ce0565b60405180910390fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836110849190612f65565b815481106110bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c0016040529081600082015481526020016001820180546110ee90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461111a90613023565b80156111675780601f1061113c57610100808354040283529160200191611167565b820191906000526020600020905b81548152906001019060200180831161114a57829003601f168201915b505050505081526020016002820154815260200160038201805461118a90613023565b80601f01602080910402602001604051908101604052809291908181526020018280546111b690613023565b80156112035780601f106111d857610100808354040283529160200191611203565b820191906000526020600020905b8154815290600101906020018083116111e657829003601f168201915b5050505050815260200160048201805461121c90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461124890613023565b80156112955780601f1061126a57610100808354040283529160200191611295565b820191906000526020600020905b81548152906001019060200180831161127857829003601f168201915b5050505050815260200160058201548152505090506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506113369190612f65565b8154811061136d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846113c69190612f65565b815481106113fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160008201548160000155600182018160010190805461142990613023565b611434929190612286565b5060028201548160020155600382018160030190805461145390613023565b61145e929190612286565b50600482018160040190805461147390613023565b61147e929190612286565b5060058201548160050155905050816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001846114d89190612f65565b8154811061150f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020906006020160000181905550600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081608001516040516115759190612ab1565b908152602001604051809103902054600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060018561160e9190612f65565b81548110611645577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016004016040516116639190612ac8565b9081526020016040518091039020819055506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082608001516040516116c89190612ab1565b9081526020016040518091039020819055506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548061174e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020906006020160008082016000905560018201600061177b9190612313565b60028201600090556003820160006117939190612313565b6004820160006117a39190612313565b6005820160009055505090557f780c1dcbc24f58f51b26d2a6f88d0e04eb1f5f0c878956b107b7254669305e5e816000015182602001518360400151846060015185608001518660a0015160405161180096959493929190612dbd565b60405180910390a15050565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905090565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508111156118d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d090612d60565b60405180910390fd5b6000811161191c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191390612ce0565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561198b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198290612be0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f290612bc0565b60405180910390fd5b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600183611a489190612f65565b81548110611a7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002090600602016040518060c001604052908160008201548152602001600182018054611ab290613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611ade90613023565b8015611b2b5780601f10611b0057610100808354040283529160200191611b2b565b820191906000526020600020905b815481529060010190602001808311611b0e57829003601f168201915b5050505050815260200160028201548152602001600382018054611b4e90613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7a90613023565b8015611bc75780601f10611b9c57610100808354040283529160200191611bc7565b820191906000526020600020905b815481529060010190602001808311611baa57829003601f168201915b50505050508152602001600482018054611be090613023565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0c90613023565b8015611c595780601f10611c2e57610100808354040283529160200191611c59565b820191906000526020600020905b815481529060010190602001808311611c3c57829003601f168201915b5050505050815260200160058201548152505090506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260800151604051611cc19190612ab1565b9081526020016040518091039020541415611eb6576000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000209060060201600090919091909150600082015181600001556020820151816001019080519060200190611d649291906121ca565b50604082015181600201556060820151816003019080519060200190611d8b9291906121ca565b506080820151816004019080519060200190611da89291906121ca565b5060a0820151816005015550506000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208260800151604051611e489190612ab1565b9081526020016040518091039020819055507ff25c3e6d21e8019c81fff7c875b55f146ead7b5977146dad78cc842133d1cd1283826000015183602001518460400151856060015186608001518760a00151604051611ead9796959493929190612adf565b60405180910390a15b505050565b606060008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905011611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890612c20565b60405180910390fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156121a557838290600052602060002090600602016040518060c001604052908160008201548152602001600182018054611fdc90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461200890613023565b80156120555780601f1061202a57610100808354040283529160200191612055565b820191906000526020600020905b81548152906001019060200180831161203857829003601f168201915b505050505081526020016002820154815260200160038201805461207890613023565b80601f01602080910402602001604051908101604052809291908181526020018280546120a490613023565b80156120f15780601f106120c6576101008083540402835291602001916120f1565b820191906000526020600020905b8154815290600101906020018083116120d457829003601f168201915b5050505050815260200160048201805461210a90613023565b80601f016020809104026020016040519081016040528092919081815260200182805461213690613023565b80156121835780601f1061215857610100808354040283529160200191612183565b820191906000526020600020905b81548152906001019060200180831161216657829003601f168201915b5050505050815260200160058201548152505081526020019060010190611f9f565b50505050905090565b6000818310156121c0578290506121c4565b8190505b92915050565b8280546121d690613023565b90600052602060002090601f0160209004810192826121f8576000855561223f565b82601f1061221157805160ff191683800117855561223f565b8280016001018555821561223f579182015b8281111561223e578251825591602001919060010190612223565b5b50905061224c9190612353565b5090565b6040518060c001604052806000815260200160608152602001600081526020016060815260200160608152602001600081525090565b82805461229290613023565b90600052602060002090601f0160209004810192826122b45760008555612302565b82601f106122c55780548555612302565b8280016001018555821561230257600052602060002091601f016020900482015b828111156123015782548255916001019190600101906122e6565b5b50905061230f9190612353565b5090565b50805461231f90613023565b6000825580601f106123315750612350565b601f01602090049060005260206000209081019061234f9190612353565b5b50565b5b8082111561236c576000816000905550600101612354565b5090565b600061238361237e84612e58565b612e33565b90508281526020810184848401111561239b57600080fd5b6123a6848285612fe1565b509392505050565b6000813590506123bd81613446565b92915050565b600082601f8301126123d457600080fd5b81356123e4848260208601612370565b91505092915050565b6000813590506123fc8161345d565b92915050565b6000806040838503121561241557600080fd5b6000612423858286016123ae565b9250506020612434858286016123ed565b9150509250929050565b60006020828403121561245057600080fd5b600082013567ffffffffffffffff81111561246a57600080fd5b612476848285016123c3565b91505092915050565b6000806000806080858703121561249557600080fd5b600085013567ffffffffffffffff8111156124af57600080fd5b6124bb878288016123c3565b94505060206124cc878288016123ed565b935050604085013567ffffffffffffffff8111156124e957600080fd5b6124f5878288016123c3565b925050606085013567ffffffffffffffff81111561251257600080fd5b61251e878288016123c3565b91505092959194509250565b60006020828403121561253c57600080fd5b600061254a848285016123ed565b91505092915050565b6000806040838503121561256657600080fd5b6000612574858286016123ed565b9250506020612585858286016123ed565b9150509250929050565b600061259b8383612965565b905092915050565b6125ac81612f99565b82525050565b60006125bd82612eae565b6125c78185612ed1565b9350836020820285016125d985612e89565b8060005b8581101561261557848403895281516125f6858261258f565b945061260183612ec4565b925060208a019950506001810190506125dd565b50829750879550505050505092915050565b61263081612fab565b82525050565b600061264182612eb9565b61264b8185612ee2565b935061265b818560208601612ff0565b6126648161315c565b840191505092915050565b600061267a82612eb9565b6126848185612ef3565b9350612694818560208601612ff0565b61269d8161315c565b840191505092915050565b60006126b382612eb9565b6126bd8185612f04565b93506126cd818560208601612ff0565b80840191505092915050565b600081546126e681613023565b6126f08186612f04565b9450600182166000811461270b576001811461271c5761274f565b60ff1983168652818601935061274f565b61272585612e99565b60005b8381101561274757815481890152600182019150602081019050612728565b838801955050505b50505092915050565b6000612765601483612ef3565b91506127708261316d565b602082019050919050565b6000612788600d83612ef3565b915061279382613196565b602082019050919050565b60006127ab600c83612ef3565b91506127b6826131bf565b602082019050919050565b60006127ce601483612ef3565b91506127d9826131e8565b602082019050919050565b60006127f1600f83612ef3565b91506127fc82613211565b602082019050919050565b6000612814601c83612ef3565b915061281f8261323a565b602082019050919050565b6000612837601b83612ef3565b915061284282613263565b602082019050919050565b600061285a602983612ef3565b91506128658261328c565b604082019050919050565b600061287d601c83612ef3565b9150612888826132db565b602082019050919050565b60006128a0603783612ef3565b91506128ab82613304565b604082019050919050565b60006128c3601d83612ef3565b91506128ce82613353565b602082019050919050565b60006128e6601983612ef3565b91506128f18261337c565b602082019050919050565b6000612909601383612ef3565b9150612914826133a5565b602082019050919050565b600061292c602483612ef3565b9150612937826133ce565b604082019050919050565b600061294f601483612ef3565b915061295a8261341d565b602082019050919050565b600060c08301600083015161297d6000860182612a93565b50602083015184820360208601526129958282612636565b91505060408301516129aa6040860182612a93565b50606083015184820360608601526129c28282612636565b915050608083015184820360808601526129dc8282612636565b91505060a08301516129f160a0860182612a93565b508091505092915050565b600060c083016000830151612a146000860182612a93565b5060208301518482036020860152612a2c8282612636565b9150506040830151612a416040860182612a93565b5060608301518482036060860152612a598282612636565b91505060808301518482036080860152612a738282612636565b91505060a0830151612a8860a0860182612a93565b508091505092915050565b612a9c81612fd7565b82525050565b612aab81612fd7565b82525050565b6000612abd82846126a8565b915081905092915050565b6000612ad482846126d9565b915081905092915050565b600060e082019050612af4600083018a6125a3565b612b016020830189612aa2565b8181036040830152612b13818861266f565b9050612b226060830187612aa2565b8181036080830152612b34818661266f565b905081810360a0830152612b48818561266f565b9050612b5760c0830184612aa2565b98975050505050505050565b60006020820190508181036000830152612b7d81846125b2565b905092915050565b6000602082019050612b9a6000830184612627565b92915050565b60006020820190508181036000830152612bb981612758565b9050919050565b60006020820190508181036000830152612bd98161277b565b9050919050565b60006020820190508181036000830152612bf98161279e565b9050919050565b60006020820190508181036000830152612c19816127c1565b9050919050565b60006020820190508181036000830152612c39816127e4565b9050919050565b60006020820190508181036000830152612c5981612807565b9050919050565b60006020820190508181036000830152612c798161282a565b9050919050565b60006020820190508181036000830152612c998161284d565b9050919050565b60006020820190508181036000830152612cb981612870565b9050919050565b60006020820190508181036000830152612cd981612893565b9050919050565b60006020820190508181036000830152612cf9816128b6565b9050919050565b60006020820190508181036000830152612d19816128d9565b9050919050565b60006020820190508181036000830152612d39816128fc565b9050919050565b60006020820190508181036000830152612d598161291f565b9050919050565b60006020820190508181036000830152612d7981612942565b9050919050565b60006020820190508181036000830152612d9a81846129fc565b905092915050565b6000602082019050612db76000830184612aa2565b92915050565b600060c082019050612dd26000830189612aa2565b8181036020830152612de4818861266f565b9050612df36040830187612aa2565b8181036060830152612e05818661266f565b90508181036080830152612e19818561266f565b9050612e2860a0830184612aa2565b979650505050505050565b6000612e3d612e4e565b9050612e498282613055565b919050565b6000604051905090565b600067ffffffffffffffff821115612e7357612e7261312d565b5b612e7c8261315c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612f1a82612fd7565b9150612f2583612fd7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612f5a57612f596130cf565b5b828201905092915050565b6000612f7082612fd7565b9150612f7b83612fd7565b925082821015612f8e57612f8d6130cf565b5b828203905092915050565b6000612fa482612fb7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561300e578082015181840152602081019050612ff3565b8381111561301d576000848401525b50505050565b6000600282049050600182168061303b57607f821691505b6020821081141561304f5761304e6130fe565b5b50919050565b61305e8261315c565b810181811067ffffffffffffffff8211171561307d5761307c61312d565b5b80604052505050565b600061309182612fd7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156130c4576130c36130cf565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4e616d652063616e6e6f7420626520656d707479000000000000000000000000600082015250565b7f4e756c6c20616464726573732100000000000000000000000000000000000000600082015250565b7f546f20796f757273656c66210000000000000000000000000000000000000000600082015250565b7f486173682063616e6e6f7420626520656d707479000000000000000000000000600082015250565b7f4e6f2066696c657320666f756e64210000000000000000000000000000000000600082015250565b7f53697a65206d757374206265206c657373207468616e20322a2a333000000000600082015250565b7f53697a65206d7573742062652067726561746572207468616e20300000000000600082015250565b7f4d696d6520747970652063616e6e6f74206265206c6f6e676572207468616e2060008201527f3531322062797465730000000000000000000000000000000000000000000000602082015250565b7f496e646578206d7573742062652067726561746572207468616e203000000000600082015250565b7f737461727420696e646578206d757374206265207374726963746c7920736d6160008201527f6c6c6572207468616e2074686520656e6420696e646578000000000000000000602082015250565b7f496e646578206d7573742062652067726561746572207468616e203021000000600082015250565b7f4d696d6520747970652063616e6e6f7420626520656d70747900000000000000600082015250565b7f496e646578206f7574206f6620626f756e647300000000000000000000000000600082015250565b7f4e616d652063616e6e6f74206265206c6f6e676572207468616e20353132206260008201527f7974657300000000000000000000000000000000000000000000000000000000602082015250565b7f496e646578206f7574206f6620626f756e647321000000000000000000000000600082015250565b61344f81612f99565b811461345a57600080fd5b50565b61346681612fd7565b811461347157600080fd5b5056fea264697066735822122095d2fe07cb8c778a7f79e6da4ca246ade12ac5c74b2e4dac629a25b879b9feeb64736f6c63430008040033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/storage.sol b/contracts/storage.sol index 0e373b3..3b3db2f 100644 --- a/contracts/storage.sol +++ b/contracts/storage.sol @@ -9,8 +9,8 @@ pragma solidity ^0.8.4; contract Storage { /** - * @dev The file's metadata. - */ + * @dev The file's metadata. + */ mapping(address => File[]) private _ownerToFiles; mapping(address => mapping(string => uint256)) private _hashToIndex; @@ -52,12 +52,12 @@ contract Storage { ); /** - * @dev Creates a new file. - * @param _name Name of the file. - * @param _size Size of the file. - * @param _mimeType Mime type of the file. - * @param _hash Hash of the file. - */ + * @dev Creates a new file. + * @param _name Name of the file. + * @param _size Size of the file. + * @param _mimeType Mime type of the file. + * @param _hash Hash of the file. + */ function storeFile( string memory _name, uint256 _size, @@ -107,31 +107,28 @@ contract Storage { } /** - * @dev Count the number of files owned by the caller. - */ + * @dev Count the number of files owned by the caller. + */ function getFilesCount() public view returns (uint256) { return _ownerToFiles[msg.sender].length; } /** - * @dev Returns the file at the given index. - * @param _index The index of the file to return. -- 1-based indexing - */ + * @dev Returns the file at the given index. + * @param _index The index of the file to return. -- 1-based indexing + */ function getSingleFile(uint256 _index) public view returns (File memory) { require( _index <= _ownerToFiles[msg.sender].length, "Index out of bounds" ); - require( - _index > 0, - "Index must be greater than 0" - ); + require(_index > 0, "Index must be greater than 0"); return _ownerToFiles[msg.sender][_index - 1]; } /** - * @dev Returns an array of files owned by the caller. - */ + * @dev Returns an array of files owned by the caller. + */ function getAllFiles() public view returns (File[] memory) { require(_ownerToFiles[msg.sender].length > 0, "No files found!"); return _ownerToFiles[msg.sender]; @@ -146,10 +143,10 @@ contract Storage { } /** - * @dev Share a file with another user. - * @param _startIndex the start index of the range of files to return. -- 1-based indexing - * @param _endIndex the end index of the range of files to return. -- 1-based indexing - */ + * @dev Share a file with another user. + * @param _startIndex the start index of the range of files to return. -- 1-based indexing + * @param _endIndex the end index of the range of files to return. -- 1-based indexing + */ function getRangeOfFiles(uint256 _startIndex, uint256 _endIndex) public view @@ -178,19 +175,16 @@ contract Storage { } /** - * @dev Share a file with another user. - * @param _to The address of the user to share the file with. - * @param _index The index of the file to be shared. -- 1-based indexing - */ + * @dev Share a file with another user. + * @param _to The address of the user to share the file with. + * @param _index The index of the file to be shared. -- 1-based indexing + */ function shareFile(address _to, uint256 _index) public { require( _index <= _ownerToFiles[msg.sender].length, "Index out of bounds!" ); - require( - _index > 0, - "Index must be greater than 0!" - ); + require(_index > 0, "Index must be greater than 0!"); require(_to != msg.sender, "To yourself!"); require(_to != address(0), "Null address!"); @@ -215,18 +209,15 @@ contract Storage { } /** - * @dev Removes a file from the storage. - * @param _index The index of the file to be removed. -- 1-based indexing - */ + * @dev Removes a file from the storage. + * @param _index The index of the file to be removed. -- 1-based indexing + */ function removeFile(uint256 _index) public { require( _index <= _ownerToFiles[msg.sender].length, "Index out of bounds!" ); - require( - _index > 0, - "Index must be greater than 0!" - ); + require(_index > 0, "Index must be greater than 0!"); File memory file = _ownerToFiles[msg.sender][_index - 1]; @@ -253,9 +244,9 @@ contract Storage { } /** - * @dev Is the file with the given hash stored in the storage? - * @param _hash The hash of the file to check. - */ + * @dev Is the file with the given hash stored in the storage? + * @param _hash The hash of the file to check. + */ function isFilePresent(string memory _hash) public view returns (bool) { return _hashToIndex[msg.sender][_hash] != 0; } diff --git a/pages/_app.js b/pages/_app.js index fa0e3f2..3baf942 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -23,7 +23,7 @@ export default function App ({ Component, pageProps }) { const [blockNumber, setBlockNumber] = useState(UNSET) const [balance, setBalance] = useState(UNSET) // 3 = '0x449fE6C97F4AD1d4769971F9fb1C33a64856AB73' - const contractAddress = '0x37655359fD67c7A91C7D7501EEee7b087A486780' + const contractAddress = '0xc4AB3262299Eee50417C1936558d1dD9849b6Ce5' useEffect(() => { import('bootstrap/dist/js/bootstrap.min.js')