60806040523480156200001157600080fd5b50336040518060400160405280601381526020017f4465766963654c6576656c526566657272616c000000000000000000000000008152506040518060400160405280600381526020016222262960e91b8152508160009081620000769190620001c2565b506001620000858282620001c2565b5050506001600160a01b038116620000b757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000c281620000c9565b506200028e565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200014657607f821691505b6020821081036200016757634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bd576000816000526020600020601f850160051c81016020861015620001985750805b601f850160051c820191505b81811015620001b957828155600101620001a4565b5050505b505050565b81516001600160401b03811115620001de57620001de6200011b565b620001f681620001ef845462000131565b846200016d565b602080601f8311600181146200022e5760008415620002155750858301515b600019600386901b1c1916600185901b178555620001b9565b600085815260208120601f198616915b828110156200025f578886015182559484019460019091019084016200023e565b50858210156200027e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611acf806200029e6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806370a08231116100cd578063a22cb46511610081578063c87b56dd11610066578063c87b56dd14610302578063e985e9c514610315578063f2fde38b1461035e57600080fd5b8063a22cb465146102dc578063b88d4fde146102ef57600080fd5b80637b47ec1a116100b25780637b47ec1a146102a35780638da5cb5b146102b657806395d89b41146102d457600080fd5b806370a0823114610288578063715018a61461029b57600080fd5b8063153ee5541161012457806340d097c31161010957806340d097c31461024157806342842e0e146102625780636352211e1461027557600080fd5b8063153ee5541461021b57806323b872dd1461022e57600080fd5b8063081812fc11610155578063081812fc146101ae578063095ea7b3146101e65780630f4ef8a6146101fb57600080fd5b806301ffc9a71461017157806306fdde0314610199575b600080fd5b61018461017f36600461165e565b610371565b60405190151581526020015b60405180910390f35b6101a1610456565b60405161019091906116e9565b6101c16101bc3660046116fc565b6104e8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610190565b6101f96101f4366004611739565b61051e565b005b6008546101c19073ffffffffffffffffffffffffffffffffffffffff1681565b6101f9610229366004611763565b61052d565b6101f961023c36600461177e565b610617565b61025461024f366004611763565b6106ac565b604051908152602001610190565b6101f961027036600461177e565b61073f565b6101c16102833660046116fc565b61075a565b610254610296366004611763565b610765565b6101f96107e5565b6101f96102b13660046116fc565b6107f9565b60065473ffffffffffffffffffffffffffffffffffffffff166101c1565b6101a161086c565b6101f96102ea3660046117ba565b61087b565b6101f96102fd366004611825565b610886565b6101a16103103660046116fc565b6108a3565b61018461032336600461191f565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b6101f961036c366004611763565b610918565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061040457507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061045057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461046590611952565b80601f016020809104026020016040519081016040528092919081815260200182805461049190611952565b80156104de5780601f106104b3576101008083540402835291602001916104de565b820191906000526020600020905b8154815290600101906020018083116104c157829003601f168201915b5050505050905090565b60006104f382610979565b5060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff16610450565b6105298282336109d8565b5050565b6105356109e5565b73ffffffffffffffffffffffffffffffffffffffff8116610582576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81163b6105d0576040517fac1c29fc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6008546040517f4fdfe67900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015290911690634fdfe67990602401600060405180830381600087803b15801561068457600080fd5b505af1158015610698573d6000803e3d6000fd5b505050506106a7838383610a38565b505050565b60085460009073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610716576040517ff656c79b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007805460009182610727836119a5565b9190505590506107378382610b23565b90505b919050565b6106a783838360405180602001604052806000815250610886565b600061045082610979565b600073ffffffffffffffffffffffffffffffffffffffff82166107bc576040517f89c62b64000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6107ed6109e5565b6107f76000610b3d565b565b60085473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610860576040517ff656c79b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61086981610bb4565b50565b60606001805461046590611952565b610529338383610c15565b610891848484610617565b61089d84848484610d12565b50505050565b60606108ae82610979565b5060006108c660408051602081019091526000815290565b905060008151116108e65760405180602001604052806000815250610911565b806108f084610f09565b604051602001610901929190611a04565b6040516020818303038152906040525b9392505050565b6109206109e5565b73ffffffffffffffffffffffffffffffffffffffff8116610970576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024016107b3565b61086981610b3d565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610737576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018490526024016107b3565b6106a78383836001610fc7565b60065473ffffffffffffffffffffffffffffffffffffffff1633146107f7576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016107b3565b73ffffffffffffffffffffffffffffffffffffffff8216610a88576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024016107b3565b6000610a95838333611192565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461089d576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808616600483015260248201849052821660448201526064016107b3565b61052982826040518060200160405280600081525061130f565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000610bc36000836000611192565b905073ffffffffffffffffffffffffffffffffffffffff8116610529576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018390526024016107b3565b73ffffffffffffffffffffffffffffffffffffffff8216610c7a576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016107b3565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83163b1561089d576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a0290610d87903390889087908790600401611a33565b6020604051808303816000875af1925050508015610de0575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610ddd91810190611a7c565b60015b610e6f573d808015610e0e576040519150601f19603f3d011682016040523d82523d6000602084013e610e13565b606091505b508051600003610e67576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107b3565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014610f02576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016107b3565b5050505050565b60606000610f1683611326565b600101905060008167ffffffffffffffff811115610f3657610f366117f6565b6040519080825280601f01601f191660200182016040528015610f60576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610f6a57509392505050565b8080610fe8575073ffffffffffffffffffffffffffffffffffffffff821615155b1561113d576000610ff884610979565b905073ffffffffffffffffffffffffffffffffffffffff83161580159061104b57508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561108a575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209387168352929052205460ff16155b156110d9576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016107b3565b811561113b57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff908116908316156111cc576111cc818486611408565b73ffffffffffffffffffffffffffffffffffffffff811615611242576111f6600085600080610fc7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff85161561128b5773ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b61131983836114b8565b6106a76000848484610d12565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061136f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef8100000000831061139b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106113b957662386f26fc10000830492506010015b6305f5e10083106113d1576305f5e100830492506008015b61271083106113e557612710830492506004015b606483106113f7576064830492506002015b600a83106107375760010192915050565b611413838383611569565b6106a75773ffffffffffffffffffffffffffffffffffffffff8316611467576040517f7e273289000000000000000000000000000000000000000000000000000000008152600481018290526024016107b3565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602481018290526044016107b3565b73ffffffffffffffffffffffffffffffffffffffff8216611508576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024016107b3565b600061151683836000611192565b905073ffffffffffffffffffffffffffffffffffffffff8116156106a7576040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600060048201526024016107b3565b600073ffffffffffffffffffffffffffffffffffffffff83161580159061162857508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806115f7575073ffffffffffffffffffffffffffffffffffffffff80851660009081526005602090815260408083209387168352929052205460ff165b80611628575060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff8481169116145b949350505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461086957600080fd5b60006020828403121561167057600080fd5b813561091181611630565b60005b8381101561169657818101518382015260200161167e565b50506000910152565b600081518084526116b781602086016020860161167b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610911602083018461169f565b60006020828403121561170e57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461073a57600080fd5b6000806040838503121561174c57600080fd5b61175583611715565b946020939093013593505050565b60006020828403121561177557600080fd5b61091182611715565b60008060006060848603121561179357600080fd5b61179c84611715565b92506117aa60208501611715565b9150604084013590509250925092565b600080604083850312156117cd57600080fd5b6117d683611715565b9150602083013580151581146117eb57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561183b57600080fd5b61184485611715565b935061185260208601611715565b925060408501359150606085013567ffffffffffffffff8082111561187657600080fd5b818701915087601f83011261188a57600080fd5b81358181111561189c5761189c6117f6565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156118e2576118e26117f6565b816040528281528a60208487010111156118fb57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561193257600080fd5b61193b83611715565b915061194960208401611715565b90509250929050565b600181811c9082168061196657607f821691505b60208210810361199f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036119fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b60008351611a1681846020880161167b565b835190830190611a2a81836020880161167b565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611a72608083018461169f565b9695505050505050565b600060208284031215611a8e57600080fd5b81516109118161163056fea26469706673582212202cf6dde3acc8fe1d07ee0f91c82bf49cee44901f10e2eff382265f9b87a779a064736f6c63430008180033