6080604052600a805460ff1916905561270f600b556001600c553480156200002657600080fd5b50604080518082018252600c81526b6772656d6c696e76696c6c6560a01b60208083019182528351808501909452600784526623a922a6a624a760c91b9084015281519192916200007a916001916200010e565b508051620000909060029060208401906200010e565b505050620000ad620000a7620000b860201b60201c565b620000bc565b6001600855620001f1565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011c90620001b4565b90600052602060002090601f0160209004810192826200014057600085556200018b565b82601f106200015b57805160ff19168380011785556200018b565b828001600101855582156200018b579182015b828111156200018b5782518255916020019190600101906200016e565b50620001999291506200019d565b5090565b5b808211156200019957600081556001016200019e565b600281046001821680620001c957607f821691505b60208210811415620001eb57634e487b7160e01b600052602260045260246000fd5b50919050565b61285880620002016000396000f3fe6080604052600436106101cd5760003560e01c8063743d12a7116100f7578063aa83e3a111610095578063cc6dd79011610064578063cc6dd7901461051e578063db3dc68014610534578063e985e9c514610549578063f2fde38b1461059f576101cd565b8063aa83e3a1146104a8578063afa65675146104c8578063b88d4fde146104de578063c87b56dd146104fe576101cd565b80638da5cb5b116100d15780638da5cb5b1461041b57806395d89b41146104465780639ea07d3f1461045b578063a22cb46514610488576101cd565b8063743d12a7146103d35780637d0acf5d146103f35780638b503b5614610413576101cd565b806323b872dd1161016f5780636352211e1161013e5780636352211e1461036457806368d202821461038457806370a082311461039e578063715018a6146103be576101cd565b806323b872dd146102e45780632f745c591461030457806342842e0e146103245780634f6ccce714610344576101cd565b8063095ea7b3116101ab578063095ea7b31461026e5780630d2762091461029057806318160ddd146102b0578063215482e6146102cf576101cd565b806301ffc9a7146101d257806306fdde0314610207578063081812fc14610229575b600080fd5b3480156101de57600080fd5b506101f26101ed3660046124ec565b6105bf565b60405190151581526020015b60405180910390f35b34801561021357600080fd5b5061021c6106f2565b6040516101fe9190612644565b34801561023557600080fd5b5061024961024436600461256a565b610784565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fe565b34801561027a57600080fd5b5061028e6102893660046124a9565b610831565b005b34801561029c57600080fd5b5061028e6102ab366004612524565b61098b565b3480156102bc57600080fd5b506000545b6040519081526020016101fe565b3480156102db57600080fd5b5061021c610a09565b3480156102f057600080fd5b5061028e6102ff3660046123cc565b610a97565b34801561031057600080fd5b506102c161031f3660046124a9565b610aa2565b34801561033057600080fd5b5061028e61033f3660046123cc565b610c67565b34801561035057600080fd5b506102c161035f36600461256a565b610c82565b34801561037057600080fd5b5061024961037f36600461256a565b610cfe565b34801561039057600080fd5b50600a546101f29060ff1681565b3480156103aa57600080fd5b506102c16103b9366004612380565b610d10565b3480156103ca57600080fd5b5061028e610dd6565b3480156103df57600080fd5b5061028e6103ee36600461256a565b610e49565b3480156103ff57600080fd5b5061028e61040e3660046124d2565b610eb5565b61028e610f4d565b34801561042757600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff16610249565b34801561045257600080fd5b5061021c61100c565b34801561046757600080fd5b506102c1610476366004612380565b600d6020526000908152604090205481565b34801561049457600080fd5b5061028e6104a3366004612480565b61101b565b3480156104b457600080fd5b5061028e6104c33660046124a9565b611132565b3480156104d457600080fd5b506102c1600c5481565b3480156104ea57600080fd5b5061028e6104f9366004612407565b6111be565b34801561050a57600080fd5b5061021c61051936600461256a565b61124d565b34801561052a57600080fd5b506102c1600b5481565b34801561054057600080fd5b5061028e611329565b34801561055557600080fd5b506101f261056436600461239a565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105ab57600080fd5b5061028e6105ba366004612380565b611412565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061065257507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061069e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000145b806106ea57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b90505b919050565b606060018054610701906126c6565b80601f016020809104026020016040519081016040528092919081815260200182805461072d906126c6565b801561077a5780601f1061074f5761010080835404028352916020019161077a565b820191906000526020600020905b81548152906001019060200180831161075d57829003601f168201915b5050505050905090565b6000610791826000541190565b6108085760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201527f78697374656e7420746f6b656e0000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b600061083c82610cfe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108e05760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016107ff565b3373ffffffffffffffffffffffffffffffffffffffff8216148061090957506109098133610564565b61097b5760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000000060648201526084016107ff565b61098683838361150b565b505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146109f25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ff565b8051610a05906009906020840190612228565b5050565b60098054610a16906126c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a42906126c6565b8015610a8f5780601f10610a6457610100808354040283529160200191610a8f565b820191906000526020600020905b815481529060010190602001808311610a7257829003601f168201915b505050505081565b61098683838361158c565b6000610aad83610d10565b8210610b215760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60448201527f647300000000000000000000000000000000000000000000000000000000000060648201526084016107ff565b600080549080805b83811015610bf25760008181526003602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff81168084527401000000000000000000000000000000000000000090910467ffffffffffffffff169183019190915215610b9a57805192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610be95786841415610be257509350610c6192505050565b6001909301925b50600101610b29565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201527f6f776e657220627920696e64657800000000000000000000000000000000000060648201526084016107ff565b92915050565b610986838383604051806020016040528060008152506111be565b600080548210610cfa5760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560448201527f6e6473000000000000000000000000000000000000000000000000000000000060648201526084016107ff565b5090565b6000610d0982611a05565b5192915050565b600073ffffffffffffffffffffffffffffffffffffffff8216610d9b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201527f65726f206164647265737300000000000000000000000000000000000000000060648201526084016107ff565b5073ffffffffffffffffffffffffffffffffffffffff166000908152600460205260409020546fffffffffffffffffffffffffffffffff1690565b60075473ffffffffffffffffffffffffffffffffffffffff163314610e3d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ff565b610e476000611b2d565b565b60075473ffffffffffffffffffffffffffffffffffffffff163314610eb05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ff565b600c55565b60075473ffffffffffffffffffffffffffffffffffffffff163314610f1c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ff565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60075473ffffffffffffffffffffffffffffffffffffffff163314610fb45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ff565b604051600090339047908381818185875af1925050503d8060008114610ff6576040519150601f19603f3d011682016040523d82523d6000602084013e610ffb565b606091505b505090508061100957600080fd5b50565b606060028054610701906126c6565b73ffffffffffffffffffffffffffffffffffffffff82163314156110815760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c657200000000000060448201526064016107ff565b33600081815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415151790559073ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611126911515815260200190565b60405180910390a35050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146111995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ff565b600054600b546111a98383612657565b11156111b457600080fd5b6109868383611ba4565b6111c984848461158c565b6111d584848484611bbe565b6112475760405162461bcd60e51b815260206004820152603360248201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260448201527f6563656976657220696d706c656d656e7465720000000000000000000000000060648201526084016107ff565b50505050565b606061125a826000541190565b6112cc5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016107ff565b60006112d6611da4565b90508051600014156112f75760405180602001604052806000815250611322565b8061130184611db3565b6040516020016113129291906125cc565b6040516020818303038152906040525b9392505050565b6002600854141561137c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107ff565b6002600855600054600a5460ff1661139357600080fd5b600b54600c546113a39083612657565b11156113ae57600080fd5b3332146113ba57600080fd5b600c54336000908152600d6020526040902054106113d757600080fd5b6113e333600c54611ba4565b600c54336000908152600d602052604081208054909190611405908490612657565b9091555050600160085550565b60075473ffffffffffffffffffffffffffffffffffffffff1633146114795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ff565b73ffffffffffffffffffffffffffffffffffffffff81166115025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107ff565b61100981611b2d565b60008281526005602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061159782611a05565b805190915060009073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806115f55750336115dd84610784565b73ffffffffffffffffffffffffffffffffffffffff16145b80611607575081516116079033610564565b90508061167c5760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084016107ff565b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146117215760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f727265637460448201527f206f776e6572000000000000000000000000000000000000000000000000000060648201526084016107ff565b73ffffffffffffffffffffffffffffffffffffffff84166117aa5760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107ff565b6117ba600084846000015161150b565b73ffffffffffffffffffffffffffffffffffffffff858116600090815260046020908152604080832080547fffffffffffffffffffffffffffffffff000000000000000000000000000000008082166fffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018316179092558986168086528386208054938416938316600190810190931693909317909255888552600390935281842080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169091177fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000004267ffffffffffffffff16021790559086018083529120549091166119a1576118f9816000541190565b156119a1578251600082815260036020908152604090912080549186015167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090931692909217929092161790555b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b6040805180820190915260008082526020820152611a24826000541190565b611a965760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360448201527f74656e7420746f6b656e0000000000000000000000000000000000000000000060648201526084016107ff565b815b60008181526003602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff81168084527401000000000000000000000000000000000000000090910467ffffffffffffffff169183019190915215611b055791506106ed9050565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611a98565b6007805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610a05828260405180602001604052806000815250611f34565b600073ffffffffffffffffffffffffffffffffffffffff84163b15611d98576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290611c359033908990889088906004016125fb565b602060405180830381600087803b158015611c4f57600080fd5b505af1925050508015611c9d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611c9a91810190612508565b60015b611d4d573d808015611ccb576040519150601f19603f3d011682016040523d82523d6000602084013e611cd0565b606091505b508051611d455760405162461bcd60e51b815260206004820152603360248201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260448201527f6563656976657220696d706c656d656e7465720000000000000000000000000060648201526084016107ff565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611d9c565b5060015b949350505050565b606060098054610701906126c6565b606081611df4575060408051808201909152600181527f300000000000000000000000000000000000000000000000000000000000000060208201526106ed565b8160005b8115611e1e5780611e088161271a565b9150611e179050600a8361266f565b9150611df8565b60008167ffffffffffffffff811115611e60577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611e8a576020820181803683370190505b5090505b8415611d9c57611e9f600183612683565b9150611eac600a86612753565b611eb7906030612657565b60f81b818381518110611ef3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611f2d600a8661266f565b9450611e8e565b610986838383600160005473ffffffffffffffffffffffffffffffffffffffff8516611fc85760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016107ff565b8361203b5760405162461bcd60e51b815260206004820152602860248201527f455243373231413a207175616e74697479206d7573742062652067726561746560448201527f72207468616e203000000000000000000000000000000000000000000000000060648201526084016107ff565b73ffffffffffffffffffffffffffffffffffffffff8516600081815260046020908152604080832080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000081166fffffffffffffffffffffffffffffffff9182168b018216178082167001000000000000000000000000000000009182900483168c01909216021790558483526003909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169092177fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000004267ffffffffffffffff16021790915581905b8581101561221f57604051829073ffffffffffffffffffffffffffffffffffffffff8916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48315612213576121a16000888488611bbe565b6122135760405162461bcd60e51b815260206004820152603360248201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260448201527f6563656976657220696d706c656d656e7465720000000000000000000000000060648201526084016107ff565b60019182019101612141565b506000556119fe565b828054612234906126c6565b90600052602060002090601f016020900481019282612256576000855561229c565b82601f1061226f57805160ff191683800117855561229c565b8280016001018555821561229c579182015b8281111561229c578251825591602001919060010190612281565b50610cfa9291505b80821115610cfa57600081556001016122a4565b600067ffffffffffffffff808411156122d3576122d36127c5565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715612319576123196127c5565b8160405280935085815286868601111561233257600080fd5b858560208301376000602087830101525050509392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106ed57600080fd5b803580151581146106ed57600080fd5b600060208284031215612391578081fd5b6113228261234c565b600080604083850312156123ac578081fd5b6123b58361234c565b91506123c36020840161234c565b90509250929050565b6000806000606084860312156123e0578081fd5b6123e98461234c565b92506123f76020850161234c565b9150604084013590509250925092565b6000806000806080858703121561241c578081fd5b6124258561234c565b93506124336020860161234c565b925060408501359150606085013567ffffffffffffffff811115612455578182fd5b8501601f81018713612465578182fd5b612474878235602084016122b8565b91505092959194509250565b60008060408385031215612492578182fd5b61249b8361234c565b91506123c360208401612370565b600080604083850312156124bb578182fd5b6124c48361234c565b946020939093013593505050565b6000602082840312156124e3578081fd5b61132282612370565b6000602082840312156124fd578081fd5b8135611322816127f4565b600060208284031215612519578081fd5b8151611322816127f4565b600060208284031215612535578081fd5b813567ffffffffffffffff81111561254b578182fd5b8201601f8101841361255b578182fd5b611d9c848235602084016122b8565b60006020828403121561257b578081fd5b5035919050565b6000815180845261259a81602086016020860161269a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600083516125de81846020880161269a565b8351908301906125f281836020880161269a565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261263a6080830184612582565b9695505050505050565b6000602082526113226020830184612582565b6000821982111561266a5761266a612767565b500190565b60008261267e5761267e612796565b500490565b60008282101561269557612695612767565b500390565b60005b838110156126b557818101518382015260200161269d565b838111156112475750506000910152565b6002810460018216806126da57607f821691505b60208210811415612714577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561274c5761274c612767565b5060010190565b60008261276257612762612796565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461100957600080fdfea26469706673582212209f780b3d9fc0a592f4e4e754811825ae9c97f8ba14100e8de9d838192be9016f64736f6c63430008020033