0x608060405234801561001057600080fd5b50600436106102775760003560e01c8063782d6fe111610160578063b4b5ea57116100d8578063dd62ed3e1161008c578063f1127ed811610071578063f1127ed814610910578063f2fde38b1461097c578063fbf0229d146109af57610277565b8063dd62ed3e146108cd578063e7a324dc1461090857610277565b8063d4ee1d90116100bd578063d4ee1d901461082e578063d505accf14610836578063dc39d06d1461089457610277565b8063b4b5ea57146107a7578063c3cda520146107da57610277565b80638da5cb5b1161012f578063a24822f811610114578063a24822f814610614578063a9059cbb14610647578063aad41a411461068057610277565b80638da5cb5b1461060457806395d89b411461060c57610277565b8063782d6fe11461058857806379ba5097146105c15780637ecebe00146105c95780638456cb59146105fc57610277565b806330adf81f116101f3578063587cde1e116101c25780635c975abb116101a75780635c975abb146105015780636fcfff451461050957806370a082311461055557610277565b8063587cde1e1461049b5780635c19a95c146104ce57610277565b806330adf81f14610465578063313ce5671461046d5780633f4ba83a1461048b5780633fc8cef31461049357610277565b806315fb0a5b1161024a57806320606b701161022f57806320606b70146103d757806323b872dd146103f157806326976e3f1461043457610277565b806315fb0a5b1461038357806318160ddd146103ae57610277565b806306fdde031461027c5780630753c30c146102f9578063095ea7b31461032e5780630e136b191461037b575b600080fd5b6102846109da565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102be5781810151838201526020016102a6565b50505050905090810190601f1680156102eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61032c6004803603602081101561030f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a13565b005b6103676004803603604081101561034457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610b53565b604080519115158252519081900360200190f35b610367610d85565b6103676004803603602081101561039957600080fd5b50356bffffffffffffffffffffffff16610d9e565b6103b6610fd8565b604080516bffffffffffffffffffffffff9092168252519081900360200190f35b6103df610fec565b60408051918252519081900360200190f35b6103676004803603606081101561040757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611010565b61043c6112ca565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103df6112e6565b61047561130a565b6040805160ff9092168252519081900360200190f35b61032c61130f565b61043c6113ad565b61043c600480360360208110156104b157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113c9565b61032c600480360360208110156104e457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f1565b610367611426565b61053c6004803603602081101561051f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611447565b6040805163ffffffff9092168252519081900360200190f35b6103df6004803603602081101561056b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661145f565b6103b66004803603604081101561059e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611572565b61032c61186e565b6103df600480360360208110156105df57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611928565b61032c61193a565b61043c6119f0565b610284611a0c565b61032c6004803603602081101561062a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611a45565b6103676004803603604081101561065d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ab0565b6103df6004803603604081101561069657600080fd5b8101906020810181356401000000008111156106b157600080fd5b8201836020820111156106c357600080fd5b803590602001918460208302840111640100000000831117156106e557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561073557600080fd5b82018360208201111561074757600080fd5b8035906020019184602083028401116401000000008311171561076957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611bbc945050505050565b6103b6600480360360208110156107bd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611efe565b61032c600480360360c08110156107f057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060ff6060820135169060808101359060a00135611fac565b61043c61235a565b61032c600480360360e081101561084c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135612376565b610367600480360360408110156108aa57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612919565b6103df600480360360408110156108e357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166129ee565b6103df612b04565b61094f6004803603604081101561092657600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16612b28565b6040805163ffffffff90931683526bffffffffffffffffffffffff90911660208301528051918290030190f35b61032c6004803603602081101561099257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612b63565b610367600480360360208110156109c557600080fd5b50356bffffffffffffffffffffffff16612bf6565b6040518060400160405280600681526020017f4e696d627573000000000000000000000000000000000000000000000000000081525081565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a3757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116610aa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061390d6032913960400191505060405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c010000000000000000000000001790556004805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e9181900360200190a150565b60025460009074010000000000000000000000000000000000000000900460ff1615610b7e57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610bcf57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610bf4565b610bf1836040518060600160405280602481526020016138e960249139612dae565b90505b6003546c01000000000000000000000000900460ff16610cb45733600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff8716908117909155815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a3610d79565b60048054604080517faee92d33000000000000000000000000000000000000000000000000000000008152339381019390935273ffffffffffffffffffffffffffffffffffffffff87811660248501526bffffffffffffffffffffffff85166044850152905191169163aee92d339160648083019260209291908290030181600087803b158015610d4457600080fd5b505af1158015610d58573d6000803e3d6000fd5b505050506040513d6020811015610d6e57600080fd5b50519150610d7f9050565b60019150505b92915050565b6003546c01000000000000000000000000900460ff1681565b60025460009073ffffffffffffffffffffffffffffffffffffffff163314610dc557600080fd5b60025474010000000000000000000000000000000000000000900460ff1615610ded57600080fd5b6000610e1f836bffffffffffffffffffffffff1660405180606001604052806025815260200161389f60259139612dae565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600660205260409020549091506bffffffffffffffffffffffff9081169082161115610e6657600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16815260066020908152604091829020548251606081019093526035808452610ec3936bffffffffffffffffffffffff909216928592919061381090830139612e6b565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260066020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790556003548151928301909152918152610f409291909116908390612e6b565b600380547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9283161790556000805460408051938516845251919273ffffffffffffffffffffffffffffffffffffffff909116917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916020908290030190a360019150505b919050565b6003546bffffffffffffffffffffffff1681565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60025460009074010000000000000000000000000000000000000000900460ff161561103b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203380855290835281842054825160608101909352602480845291946bffffffffffffffffffffffff9091169390926110a39288926138e990830139612dae565b6003549091506c01000000000000000000000000900460ff166111ec578673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561110a57506bffffffffffffffffffffffff82811614155b156111dc57600061113483836040518060600160405280603c815260200161393f603c9139612e6b565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600560209081526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915582519081529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b6111e7878783612efc565b6112bb565b60048054604080517f8b477adb000000000000000000000000000000000000000000000000000000008152339381019390935273ffffffffffffffffffffffffffffffffffffffff8a8116602485015289811660448501526bffffffffffffffffffffffff851660648501529051911691638b477adb9160848083019260209291908290030181600087803b15801561128457600080fd5b505af1158015611298573d6000803e3d6000fd5b505050506040513d60208110156112ae57600080fd5b505193506112c392505050565b600193505050505b9392505050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60005473ffffffffffffffffffffffffffffffffffffffff16331461133357600080fd5b60025474010000000000000000000000000000000000000000900460ff1661135a57600080fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60025474010000000000000000000000000000000000000000900460ff161561141957600080fd5b61142333826131a2565b50565b60025474010000000000000000000000000000000000000000900460ff1681565b60096020526000908152604090205463ffffffff1681565b6003546000906c01000000000000000000000000900460ff166114b6575073ffffffffffffffffffffffffffffffffffffffff81166000908152600660205260409020546bffffffffffffffffffffffff16610fd3565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b50519050610fd3565b60004382106115cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613a286026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604090205463ffffffff1680611607576000915050610d7f565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601811685529252909120541683106116df5773ffffffffffffffffffffffffffffffffffffffff841660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff169050610d7f565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832083805290915290205463ffffffff16831015611727576000915050610d7f565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff161115611816576000600263ffffffff8484031673ffffffffffffffffffffffffffffffffffffffff8916600090815260086020908152604080832094909304860363ffffffff8181168452948252918390208351808501909452549384168084526401000000009094046bffffffffffffffffffffffff16908301529250908714156117f157602001519450610d7f9350505050565b805163ffffffff168711156118085781935061180f565b6001820392505b505061174d565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260086020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461189257600080fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b600a6020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461195e57600080fd5b60025474010000000000000000000000000000000000000000900460ff161561198657600080fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600381526020017f4e4255000000000000000000000000000000000000000000000000000000000081525081565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a6957600080fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025460009074010000000000000000000000000000000000000000900460ff1615611adb57600080fd5b6000611aff8360405180606001604052806025815260200161389f60259139612dae565b6003549091506c01000000000000000000000000900460ff16611b2c57611b27338583612efc565b610d79565b60048054604080517f6e18980a000000000000000000000000000000000000000000000000000000008152339381019390935273ffffffffffffffffffffffffffffffffffffffff87811660248501526bffffffffffffffffffffffff851660448501529051911691636e18980a9160648083019260209291908290030181600087803b158015610d4457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff163314611be157600080fd5b8151835114611bef57600080fd5b6064835110611bfd57600080fd5b6000805b8351811015611c2f57838181518110611c1657fe5b6020026020010151820191508080600101915050611c01565b506000611c548260405180606001604052806025815260200161389f60259139612dae565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260066020908152604091829020548251606081019093526035808452939450611cb5936bffffffffffffffffffffffff90911692859290919061381090830139612e6b565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260066020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611ef357611dc060066000888481518110611d3357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16868381518110611d9a57fe5b602002602001015160405180606001604052806035815260200161381060359139613256565b60066000888481518110611dd057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550858181518110611e4c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878481518110611ece57fe5b60200260200101516040518082815260200191505060405180910390a3600101611d17565b505092519392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526009602052604081205463ffffffff1680611f365760006112c3565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff169392505050565b60025474010000000000000000000000000000000000000000900460ff1615611fd457600080fd5b60408051808201909152600681527f4e696d627573000000000000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f68bd002dbf64dcef541f76d57d90420809af9d57c5f801a2f7c294848893c8be6120556132df565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c084015273ffffffffffffffffffffffffffffffffffffffff8b1660e084015261010083018a90526101208084018a905282518085039091018152610140840183528051908501207f19010000000000000000000000000000000000000000000000000000000000006101608501526101628401829052610182808501829052835180860390910181526101a285018085528151918701919091206000918290526101c2860180865281905260ff8b166101e287015261020286018a905261022286018990529351929650909492939092600192610242808401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa1580156121ce573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612265576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806138c46025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a6020526040902080546001810190915589146122ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061387e6021913960400191505060405180910390fd5b87421115612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061397b6025913960400191505060405180910390fd5b61234d818b6131a2565b505050505b505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60025474010000000000000000000000000000000000000000900460ff161561239e57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8614156123ef57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612414565b61241186604051806060016040528060238152602001613a8160239139612dae565b90505b60408051808201909152600681527f4e696d627573000000000000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f68bd002dbf64dcef541f76d57d90420809af9d57c5f801a2f7c294848893c8be6124956132df565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a08301825280519084012073ffffffffffffffffffffffffffffffffffffffff8d81166000818152600a8752848120805460018082019092557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960c089015260e0880193909352928f1661010087015261012086018e90526101408601919091526101608086018d905284518087039091018152610180860185528051908701207f19010000000000000000000000000000000000000000000000000000000000006101a08701526101a286018490526101c2808701829052855180880390910181526101e2870180875281519189019190912090839052610202870180875281905260ff8d1661022288015261024287018c905261026287018b905294519397509593949093919261028280830193927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa158015612637573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166126e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4e42553a3a7065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461277e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4e42553a3a7065726d69743a20756e617574686f72697a656400000000000000604482015290519081900360640190fd5b884211156127ed57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4e42553a3a7065726d69743a207369676e617475726520657870697265640000604482015290519081900360640190fd5b84600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405180826bffffffffffffffffffffffff16815260200191505060405180910390a3505050505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461293e57600080fd5b60008054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810186905290519186169263a9059cbb926044808401936020939083900390910190829087803b1580156129bb57600080fd5b505af11580156129cf573d6000803e3d6000fd5b505050506040513d60208110156129e557600080fd5b50519392505050565b6003546000906c01000000000000000000000000900460ff16612a52575073ffffffffffffffffffffffffffffffffffffffff8083166000908152600560209081526040808320938516835292905220546bffffffffffffffffffffffff16610d7f565b60048054604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169482019490945285841660248201529051929091169163dd62ed3e91604480820192602092909190829003018186803b158015612ad157600080fd5b505afa158015612ae5573d6000803e3d6000fd5b505050506040513d6020811015612afb57600080fd5b50519050610d7f565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600860209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b60005473ffffffffffffffffffffffffffffffffffffffff163314612b8757600080fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161415612baf57600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025460009074010000000000000000000000000000000000000000900460ff1615612c2157600080fd5b6000612c53836bffffffffffffffffffffffff1660405180606001604052806025815260200161389f60259139612dae565b336000908152600660205260409020549091506bffffffffffffffffffffffff9081169082161115612c8457600080fd5b33600090815260066020908152604091829020548251606081019093526035808452612ccb936bffffffffffffffffffffffff909216928592919061381090830139612e6b565b33600090815260066020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790556003548151928301909152918152612d329291909116908390612e6b565b600380547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9283161790556040805191831682525160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916020908290030190a350600192915050565b6000816c010000000000000000000000008410612e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e28578181015183820152602001612e10565b50505050905090810190601f168015612e555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290612ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612e28578181015183820152602001612e10565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316612f68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806139c6603b913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216612fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806138456039913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604091829020548251606081019093526035808452613031936bffffffffffffffffffffffff909216928592919061381090830139612e6b565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260066020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96871617905592861682529082902054825160608101909352602f8084526130c39491909116928592909190613aa490830139613256565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526006602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790558151948616855290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a373ffffffffffffffffffffffffffffffffffffffff80841660009081526007602052604080822054858416835291205461319d929182169116836132e3565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260076020818152604080842080546006845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46132508284836132e3565b50505050565b6000838301826bffffffffffffffffffffffff80871690831610156132d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612e28578181015183820152602001612e10565b50949350505050565b4690565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561332d57506000816bffffffffffffffffffffffff16115b1561319d5773ffffffffffffffffffffffffffffffffffffffff8316156134305773ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604081205463ffffffff1690816133875760006133f7565b73ffffffffffffffffffffffffffffffffffffffff851660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061341e8285604051806060016040528060278152602001613a0160279139612e6b565b905061342c86848484613526565b5050505b73ffffffffffffffffffffffffffffffffffffffff82161561319d5773ffffffffffffffffffffffffffffffffffffffff821660009081526009602052604081205463ffffffff1690816134855760006134f5565b73ffffffffffffffffffffffffffffffffffffffff841660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061351c82856040518060600160405280602681526020016139a060269139613256565b9050612352858484845b600061354a43604051806060016040528060338152602001613a4e6033913961379f565b905060008463ffffffff161180156135be575073ffffffffffffffffffffffffffffffffffffffff8516600090815260086020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b1561365d5773ffffffffffffffffffffffffffffffffffffffff851660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055613739565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152600883528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252600990935292909220805460018801909316929091169190911790555b604080516bffffffffffffffffffffffff808616825284166020820152815173ffffffffffffffffffffffffffffffffffffffff8816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b6000816401000000008410612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612e28578181015183820152602001612e1056fe4e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f20616464726573734e42553a3a64656c656761746542795369673a20696e76616c6964206e6f6e63654e42553a3a7472616e736665723a20616d6f756e74206578636565647320393620626974734e42553a3a64656c656761746542795369673a20696e76616c6964207369676e61747572654e42553a3a617070726f76653a20616d6f756e74206578636565647320393620626974734e42553a3a6465707265636174653a2063616e6e6f74207570677261646520746f20746865207a65726f20616464726573734e42553a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654e42553a3a64656c656761746542795369673a207369676e617475726520657870697265644e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77734e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573734e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77734e42553a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65644e42553a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734e42553a3a7065726d69743a20616d6f756e74206578636565647320393620626974734e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773a26469706673582212208bfeda19d5ae036639bd1a2b650fee6b6cafef273a469b84b340494061cc05c164736f6c63430007060033
0x60806040526002805460ff60a01b19169055600380546001600160601b0319166b033b2e3c9fd0803ce800000017905534801561003b57600080fd5b50600080546001600160a01b03199081163390811780845560028054909316909117909155600380546001600160a01b03928316845260066020908152604080862080546001600160601b0319166001600160601b0394851617905585549354815193168352519290931693927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a36002805460ff60a01b1916600160a01b179055613b08806100f36000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063782d6fe111610160578063b4b5ea57116100d8578063dd62ed3e1161008c578063f1127ed811610071578063f1127ed814610910578063f2fde38b1461097c578063fbf0229d146109af57610277565b8063dd62ed3e146108cd578063e7a324dc1461090857610277565b8063d4ee1d90116100bd578063d4ee1d901461082e578063d505accf14610836578063dc39d06d1461089457610277565b8063b4b5ea57146107a7578063c3cda520146107da57610277565b80638da5cb5b1161012f578063a24822f811610114578063a24822f814610614578063a9059cbb14610647578063aad41a411461068057610277565b80638da5cb5b1461060457806395d89b411461060c57610277565b8063782d6fe11461058857806379ba5097146105c15780637ecebe00146105c95780638456cb59146105fc57610277565b806330adf81f116101f3578063587cde1e116101c25780635c975abb116101a75780635c975abb146105015780636fcfff451461050957806370a082311461055557610277565b8063587cde1e1461049b5780635c19a95c146104ce57610277565b806330adf81f14610465578063313ce5671461046d5780633f4ba83a1461048b5780633fc8cef31461049357610277565b806315fb0a5b1161024a57806320606b701161022f57806320606b70146103d757806323b872dd146103f157806326976e3f1461043457610277565b806315fb0a5b1461038357806318160ddd146103ae57610277565b806306fdde031461027c5780630753c30c146102f9578063095ea7b31461032e5780630e136b191461037b575b600080fd5b6102846109da565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102be5781810151838201526020016102a6565b50505050905090810190601f1680156102eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61032c6004803603602081101561030f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610a13565b005b6103676004803603604081101561034457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610b53565b604080519115158252519081900360200190f35b610367610d85565b6103676004803603602081101561039957600080fd5b50356bffffffffffffffffffffffff16610d9e565b6103b6610fd8565b604080516bffffffffffffffffffffffff9092168252519081900360200190f35b6103df610fec565b60408051918252519081900360200190f35b6103676004803603606081101561040757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611010565b61043c6112ca565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6103df6112e6565b61047561130a565b6040805160ff9092168252519081900360200190f35b61032c61130f565b61043c6113ad565b61043c600480360360208110156104b157600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113c9565b61032c600480360360208110156104e457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166113f1565b610367611426565b61053c6004803603602081101561051f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611447565b6040805163ffffffff9092168252519081900360200190f35b6103df6004803603602081101561056b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661145f565b6103b66004803603604081101561059e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611572565b61032c61186e565b6103df600480360360208110156105df57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611928565b61032c61193a565b61043c6119f0565b610284611a0c565b61032c6004803603602081101561062a57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611a45565b6103676004803603604081101561065d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611ab0565b6103df6004803603604081101561069657600080fd5b8101906020810181356401000000008111156106b157600080fd5b8201836020820111156106c357600080fd5b803590602001918460208302840111640100000000831117156106e557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929594936020810193503591505064010000000081111561073557600080fd5b82018360208201111561074757600080fd5b8035906020019184602083028401116401000000008311171561076957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611bbc945050505050565b6103b6600480360360208110156107bd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611efe565b61032c600480360360c08110156107f057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060ff6060820135169060808101359060a00135611fac565b61043c61235a565b61032c600480360360e081101561084c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135612376565b610367600480360360408110156108aa57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612919565b6103df600480360360408110156108e357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166129ee565b6103df612b04565b61094f6004803603604081101561092657600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16612b28565b6040805163ffffffff90931683526bffffffffffffffffffffffff90911660208301528051918290030190f35b61032c6004803603602081101561099257600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612b63565b610367600480360360208110156109c557600080fd5b50356bffffffffffffffffffffffff16612bf6565b6040518060400160405280600681526020017f4e696d627573000000000000000000000000000000000000000000000000000081525081565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a3757600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116610aa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603281526020018061390d6032913960400191505060405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c010000000000000000000000001790556004805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fcc358699805e9a8b7f77b522628c7cb9abd07d9efb86b6fb616af1609036a99e9181900360200190a150565b60025460009074010000000000000000000000000000000000000000900460ff1615610b7e57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831415610bcf57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610bf4565b610bf1836040518060600160405280602481526020016138e960249139612dae565b90505b6003546c01000000000000000000000000900460ff16610cb45733600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168085529083529281902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff8716908117909155815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a3610d79565b60048054604080517faee92d33000000000000000000000000000000000000000000000000000000008152339381019390935273ffffffffffffffffffffffffffffffffffffffff87811660248501526bffffffffffffffffffffffff85166044850152905191169163aee92d339160648083019260209291908290030181600087803b158015610d4457600080fd5b505af1158015610d58573d6000803e3d6000fd5b505050506040513d6020811015610d6e57600080fd5b50519150610d7f9050565b60019150505b92915050565b6003546c01000000000000000000000000900460ff1681565b60025460009073ffffffffffffffffffffffffffffffffffffffff163314610dc557600080fd5b60025474010000000000000000000000000000000000000000900460ff1615610ded57600080fd5b6000610e1f836bffffffffffffffffffffffff1660405180606001604052806025815260200161389f60259139612dae565b6000805473ffffffffffffffffffffffffffffffffffffffff168152600660205260409020549091506bffffffffffffffffffffffff9081169082161115610e6657600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff16815260066020908152604091829020548251606081019093526035808452610ec3936bffffffffffffffffffffffff909216928592919061381090830139612e6b565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260066020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790556003548151928301909152918152610f409291909116908390612e6b565b600380547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9283161790556000805460408051938516845251919273ffffffffffffffffffffffffffffffffffffffff909116917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916020908290030190a360019150505b919050565b6003546bffffffffffffffffffffffff1681565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b60025460009074010000000000000000000000000000000000000000900460ff161561103b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff841660009081526005602090815260408083203380855290835281842054825160608101909352602480845291946bffffffffffffffffffffffff9091169390926110a39288926138e990830139612dae565b6003549091506c01000000000000000000000000900460ff166111ec578673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561110a57506bffffffffffffffffffffffff82811614155b156111dc57600061113483836040518060600160405280603c815260200161393f603c9139612e6b565b73ffffffffffffffffffffffffffffffffffffffff8981166000818152600560209081526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff871690811790915582519081529151949550929391927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592918290030190a3505b6111e7878783612efc565b6112bb565b60048054604080517f8b477adb000000000000000000000000000000000000000000000000000000008152339381019390935273ffffffffffffffffffffffffffffffffffffffff8a8116602485015289811660448501526bffffffffffffffffffffffff851660648501529051911691638b477adb9160848083019260209291908290030181600087803b15801561128457600080fd5b505af1158015611298573d6000803e3d6000fd5b505050506040513d60208110156112ae57600080fd5b505193506112c392505050565b600193505050505b9392505050565b60045473ffffffffffffffffffffffffffffffffffffffff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60005473ffffffffffffffffffffffffffffffffffffffff16331461133357600080fd5b60025474010000000000000000000000000000000000000000900460ff1661135a57600080fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60076020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60025474010000000000000000000000000000000000000000900460ff161561141957600080fd5b61142333826131a2565b50565b60025474010000000000000000000000000000000000000000900460ff1681565b60096020526000908152604090205463ffffffff1681565b6003546000906c01000000000000000000000000900460ff166114b6575073ffffffffffffffffffffffffffffffffffffffff81166000908152600660205260409020546bffffffffffffffffffffffff16610fd3565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561153f57600080fd5b505afa158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b50519050610fd3565b60004382106115cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613a286026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604090205463ffffffff1680611607576000915050610d7f565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601811685529252909120541683106116df5773ffffffffffffffffffffffffffffffffffffffff841660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff168352929052205464010000000090046bffffffffffffffffffffffff169050610d7f565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260086020908152604080832083805290915290205463ffffffff16831015611727576000915050610d7f565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff161115611816576000600263ffffffff8484031673ffffffffffffffffffffffffffffffffffffffff8916600090815260086020908152604080832094909304860363ffffffff8181168452948252918390208351808501909452549384168084526401000000009094046bffffffffffffffffffffffff16908301529250908714156117f157602001519450610d7f9350505050565b805163ffffffff168711156118085781935061180f565b6001820392505b505061174d565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260086020908152604080832063ffffffff909416835292905220546bffffffffffffffffffffffff6401000000009091041691505092915050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461189257600080fd5b6001546000805460405173ffffffffffffffffffffffffffffffffffffffff93841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b600a6020526000908152604090205481565b60005473ffffffffffffffffffffffffffffffffffffffff16331461195e57600080fd5b60025474010000000000000000000000000000000000000000900460ff161561198657600080fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b6040518060400160405280600381526020017f4e4255000000000000000000000000000000000000000000000000000000000081525081565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a6957600080fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025460009074010000000000000000000000000000000000000000900460ff1615611adb57600080fd5b6000611aff8360405180606001604052806025815260200161389f60259139612dae565b6003549091506c01000000000000000000000000900460ff16611b2c57611b27338583612efc565b610d79565b60048054604080517f6e18980a000000000000000000000000000000000000000000000000000000008152339381019390935273ffffffffffffffffffffffffffffffffffffffff87811660248501526bffffffffffffffffffffffff851660448501529051911691636e18980a9160648083019260209291908290030181600087803b158015610d4457600080fd5b6000805473ffffffffffffffffffffffffffffffffffffffff163314611be157600080fd5b8151835114611bef57600080fd5b6064835110611bfd57600080fd5b6000805b8351811015611c2f57838181518110611c1657fe5b6020026020010151820191508080600101915050611c01565b506000611c548260405180606001604052806025815260200161389f60259139612dae565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260066020908152604091829020548251606081019093526035808452939450611cb5936bffffffffffffffffffffffff90911692859290919061381090830139612e6b565b6000805473ffffffffffffffffffffffffffffffffffffffff16815260066020526040812080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff93909316929092179091555b8551811015611ef357611dc060066000888481518110611d3357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a90046bffffffffffffffffffffffff16868381518110611d9a57fe5b602002602001015160405180606001604052806035815260200161381060359139613256565b60066000888481518110611dd057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550858181518110611e4c57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef878481518110611ece57fe5b60200260200101516040518082815260200191505060405180910390a3600101611d17565b505092519392505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526009602052604081205463ffffffff1680611f365760006112c3565b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff850163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff169392505050565b60025474010000000000000000000000000000000000000000900460ff1615611fd457600080fd5b60408051808201909152600681527f4e696d627573000000000000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f68bd002dbf64dcef541f76d57d90420809af9d57c5f801a2f7c294848893c8be6120556132df565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a0830182528051908401207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c084015273ffffffffffffffffffffffffffffffffffffffff8b1660e084015261010083018a90526101208084018a905282518085039091018152610140840183528051908501207f19010000000000000000000000000000000000000000000000000000000000006101608501526101628401829052610182808501829052835180860390910181526101a285018085528151918701919091206000918290526101c2860180865281905260ff8b166101e287015261020286018a905261022286018990529351929650909492939092600192610242808401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa1580156121ce573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612265576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806138c46025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000908152600a6020526040902080546001810190915589146122ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061387e6021913960400191505060405180910390fd5b87421115612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061397b6025913960400191505060405180910390fd5b61234d818b6131a2565b505050505b505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60025474010000000000000000000000000000000000000000900460ff161561239e57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8614156123ef57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612414565b61241186604051806060016040528060238152602001613a8160239139612dae565b90505b60408051808201909152600681527f4e696d627573000000000000000000000000000000000000000000000000000060209091015260007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8667f68bd002dbf64dcef541f76d57d90420809af9d57c5f801a2f7c294848893c8be6124956132df565b60408051602080820195909552808201939093526060830191909152306080808401919091528151808403909101815260a08301825280519084012073ffffffffffffffffffffffffffffffffffffffff8d81166000818152600a8752848120805460018082019092557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960c089015260e0880193909352928f1661010087015261012086018e90526101408601919091526101608086018d905284518087039091018152610180860185528051908701207f19010000000000000000000000000000000000000000000000000000000000006101a08701526101a286018490526101c2808701829052855180880390910181526101e2870180875281519189019190912090839052610202870180875281905260ff8d1661022288015261024287018c905261026287018b905294519397509593949093919261028280830193927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa158015612637573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166126e457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4e42553a3a7065726d69743a20696e76616c6964207369676e61747572650000604482015290519081900360640190fd5b8b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461277e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4e42553a3a7065726d69743a20756e617574686f72697a656400000000000000604482015290519081900360640190fd5b884211156127ed57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4e42553a3a7065726d69743a207369676e617475726520657870697265640000604482015290519081900360640190fd5b84600560008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508a73ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258760405180826bffffffffffffffffffffffff16815260200191505060405180910390a3505050505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461293e57600080fd5b60008054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92831660048201526024810186905290519186169263a9059cbb926044808401936020939083900390910190829087803b1580156129bb57600080fd5b505af11580156129cf573d6000803e3d6000fd5b505050506040513d60208110156129e557600080fd5b50519392505050565b6003546000906c01000000000000000000000000900460ff16612a52575073ffffffffffffffffffffffffffffffffffffffff8083166000908152600560209081526040808320938516835292905220546bffffffffffffffffffffffff16610d7f565b60048054604080517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781169482019490945285841660248201529051929091169163dd62ed3e91604480820192602092909190829003018186803b158015612ad157600080fd5b505afa158015612ae5573d6000803e3d6000fd5b505050506040513d6020811015612afb57600080fd5b50519050610d7f565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b600860209081526000928352604080842090915290825290205463ffffffff81169064010000000090046bffffffffffffffffffffffff1682565b60005473ffffffffffffffffffffffffffffffffffffffff163314612b8757600080fd5b60015473ffffffffffffffffffffffffffffffffffffffff82811691161415612baf57600080fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60025460009074010000000000000000000000000000000000000000900460ff1615612c2157600080fd5b6000612c53836bffffffffffffffffffffffff1660405180606001604052806025815260200161389f60259139612dae565b336000908152600660205260409020549091506bffffffffffffffffffffffff9081169082161115612c8457600080fd5b33600090815260066020908152604091829020548251606081019093526035808452612ccb936bffffffffffffffffffffffff909216928592919061381090830139612e6b565b33600090815260066020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9586161790556003548151928301909152918152612d329291909116908390612e6b565b600380547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9283161790556040805191831682525160009133917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916020908290030190a350600192915050565b6000816c010000000000000000000000008410612e63576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e28578181015183820152602001612e10565b50505050905090810190601f168015612e555780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b509192915050565b6000836bffffffffffffffffffffffff16836bffffffffffffffffffffffff1611158290612ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612e28578181015183820152602001612e10565b505050900390565b73ffffffffffffffffffffffffffffffffffffffff8316612f68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806139c6603b913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216612fd4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806138456039913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260066020908152604091829020548251606081019093526035808452613031936bffffffffffffffffffffffff909216928592919061381090830139612e6b565b73ffffffffffffffffffffffffffffffffffffffff848116600090815260066020908152604080832080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff96871617905592861682529082902054825160608101909352602f8084526130c39491909116928592909190613aa490830139613256565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526006602090815260409182902080547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff9687161790558151948616855290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a373ffffffffffffffffffffffffffffffffffffffff80841660009081526007602052604080822054858416835291205461319d929182169116836132e3565b505050565b73ffffffffffffffffffffffffffffffffffffffff808316600081815260076020818152604080842080546006845282862054949093528787167fffffffffffffffffffffffff000000000000000000000000000000000000000084168117909155905191909516946bffffffffffffffffffffffff9092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46132508284836132e3565b50505050565b6000838301826bffffffffffffffffffffffff80871690831610156132d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612e28578181015183820152602001612e10565b50949350505050565b4690565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561332d57506000816bffffffffffffffffffffffff16115b1561319d5773ffffffffffffffffffffffffffffffffffffffff8316156134305773ffffffffffffffffffffffffffffffffffffffff831660009081526009602052604081205463ffffffff1690816133875760006133f7565b73ffffffffffffffffffffffffffffffffffffffff851660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061341e8285604051806060016040528060278152602001613a0160279139612e6b565b905061342c86848484613526565b5050505b73ffffffffffffffffffffffffffffffffffffffff82161561319d5773ffffffffffffffffffffffffffffffffffffffff821660009081526009602052604081205463ffffffff1690816134855760006134f5565b73ffffffffffffffffffffffffffffffffffffffff841660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860163ffffffff16845290915290205464010000000090046bffffffffffffffffffffffff165b9050600061351c82856040518060600160405280602681526020016139a060269139613256565b9050612352858484845b600061354a43604051806060016040528060338152602001613a4e6033913961379f565b905060008463ffffffff161180156135be575073ffffffffffffffffffffffffffffffffffffffff8516600090815260086020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b1561365d5773ffffffffffffffffffffffffffffffffffffffff851660009081526008602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff880163ffffffff168452909152902080547fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff166401000000006bffffffffffffffffffffffff851602179055613739565b60408051808201825263ffffffff80841682526bffffffffffffffffffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8b166000818152600883528781208c871682528352878120965187549451909516640100000000027fffffffffffffffffffffffffffffffff000000000000000000000000ffffffff9587167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000958616179590951694909417909555938252600990935292909220805460018801909316929091169190911790555b604080516bffffffffffffffffffffffff808616825284166020820152815173ffffffffffffffffffffffffffffffffffffffff8816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b6000816401000000008410612e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315612e28578181015183820152602001612e1056fe4e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657220746f20746865207a65726f20616464726573734e42553a3a64656c656761746542795369673a20696e76616c6964206e6f6e63654e42553a3a7472616e736665723a20616d6f756e74206578636565647320393620626974734e42553a3a64656c656761746542795369673a20696e76616c6964207369676e61747572654e42553a3a617070726f76653a20616d6f756e74206578636565647320393620626974734e42553a3a6465707265636174653a2063616e6e6f74207570677261646520746f20746865207a65726f20616464726573734e42553a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654e42553a3a64656c656761746542795369673a207369676e617475726520657870697265644e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77734e42553a3a5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e736665722066726f6d20746865207a65726f20616464726573734e42553a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77734e42553a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e65644e42553a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734e42553a3a7065726d69743a20616d6f756e74206578636565647320393620626974734e42553a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f7773a26469706673582212208bfeda19d5ae036639bd1a2b650fee6b6cafef273a469b84b340494061cc05c164736f6c63430007060033