608060405234801561001057600080fd5b50612939806100206000396000f3fe608060405234801561001057600080fd5b50600436106101f7576000357c01000000000000000000000000000000000000000000000000000000009004806379cc67901161012157806398650275116100bf578063b21f2d3b1161008e578063b21f2d3b14610a47578063c4d66de814610a8b578063dd62ed3e14610acf578063f357181914610b47576101f7565b80639865027514610915578063a457c2d71461091f578063a9059cbb14610985578063aa271e1a146109eb576101f7565b806395d89b41116100fb57806395d89b41146107ee5780639711715a14610871578063981b24d01461088f578063983b2d56146108d1576101f7565b806379cc67901461075257806382dc1ec4146107a05780638456cb59146107e4576101f7565b80633f4ba83a116101995780634ee2cd7e116101685780634ee2cd7e1461066c5780635c975abb146106ce5780636ef8d66d146106f057806370a08231146106fa576101f7565b80633f4ba83a1461057257806340c10f191461057c57806342966c68146105e257806346fbf68e14610610576101f7565b806318160ddd116101d557806318160ddd1461044457806323b872dd14610462578063313ce567146104e8578063395093511461050c576101f7565b806306fdde03146101fc578063095ea7b31461027f5780631624f6c6146102e5575b600080fd5b610204610cd0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610244578082015181840152602081019050610229565b50505050905090810190601f1680156102715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102cb6004803603604081101561029557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d72565b604051808215151515815260200191505060405180910390f35b610442600480360360608110156102fb57600080fd5b810190808035906020019064010000000081111561031857600080fd5b82018360208201111561032a57600080fd5b8035906020019184600183028401116401000000008311171561034c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103af57600080fd5b8201836020820111156103c157600080fd5b803590602001918460018302840111640100000000831117156103e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050610da3565b005b61044c610ef0565b6040518082815260200191505060405180910390f35b6104ce6004803603606081101561047857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610efa565b604051808215151515815260200191505060405180910390f35b6104f0610f2d565b604051808260ff1660ff16815260200191505060405180910390f35b6105586004803603604081101561052257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f44565b604051808215151515815260200191505060405180910390f35b61057a610f75565b005b6105c86004803603604081101561059257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611026565b604051808215151515815260200191505060405180910390f35b61060e600480360360208110156105f857600080fd5b8101908080359060200190929190505050611050565b005b6106526004803603602081101561062657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105d565b604051808215151515815260200191505060405180910390f35b6106b86004803603604081101561068257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061107a565b6040518082815260200191505060405180910390f35b6106d66110eb565b604051808215151515815260200191505060405180910390f35b6106f8611103565b005b61073c6004803603602081101561071057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061110e565b6040518082815260200191505060405180910390f35b61079e6004803603604081101561076857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611157565b005b6107e2600480360360208110156107b657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611165565b005b6107ec611185565b005b6107f6611237565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561083657808201518184015260208101905061081b565b50505050905090810190601f1680156108635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108796112d9565b6040518082815260200191505060405180910390f35b6108bb600480360360208110156108a557600080fd5b8101908080359060200190929190505050611333565b6040518082815260200191505060405180910390f35b610913600480360360208110156108e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611365565b005b61091d611385565b005b61096b6004803603604081101561093557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611390565b604051808215151515815260200191505060405180910390f35b6109d16004803603604081101561099b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113c1565b604051808215151515815260200191505060405180910390f35b610a2d60048036036020811015610a0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113f2565b604051808215151515815260200191505060405180910390f35b610a8960048036036020811015610a5d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611410565b005b610acd60048036036020811015610aa157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a1565b005b610b3160048036036040811015610ae557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115ac565b6040518082815260200191505060405180910390f35b610cce600480360360a0811015610b5d57600080fd5b8101908080359060200190640100000000811115610b7a57600080fd5b820183602082011115610b8c57600080fd5b80359060200191846001830284011164010000000083111715610bae57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c1157600080fd5b820183602082011115610c2357600080fd5b80359060200191846001830284011164010000000083111715610c4557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611633565b005b606060688054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d685780601f10610d3d57610100808354040283529160200191610d68565b820191906000526020600020905b815481529060010190602001808311610d4b57829003601f168201915b5050505050905090565b600061010260009054906101000a900460ff16151515610d9157600080fd5b610d9b8383611756565b905092915050565b600060019054906101000a900460ff1680610dc25750610dc161176d565b5b80610dd957506000809054906101000a900460ff16155b1515610e30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806128e0602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015610e80576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8360689080519060200190610e96929190612815565b508260699080519060200190610ead929190612815565b5081606a60006101000a81548160ff021916908360ff1602179055508015610eea5760008060016101000a81548160ff0219169083151502179055505b50505050565b6000603554905090565b600061010260009054906101000a900460ff16151515610f1957600080fd5b610f2484848461177e565b90509392505050565b6000606a60009054906101000a900460ff16905090565b600061010260009054906101000a900460ff16151515610f6357600080fd5b610f6d838361182f565b905092915050565b610f7e3361105d565b1515610f8957600080fd5b61010260009054906101000a900460ff161515610fa557600080fd5b600061010260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000611031336113f2565b151561103c57600080fd5b61104683836118d4565b6001905092915050565b61105a33826118f3565b50565b60006110738260cf61191290919063ffffffff16565b9050919050565b60008060006110c88461016760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206119a6565b91509150816110df576110da8561110e565b6110e1565b805b9250505092915050565b600061010260009054906101000a900460ff16905090565b61110c33611a35565b565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111618282611a8f565b5050565b61116e3361105d565b151561117957600080fd5b61118281611b36565b50565b61118e3361105d565b151561119957600080fd5b61010260009054906101000a900460ff161515156111b657600080fd5b600161010260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b606060698054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112cf5780601f106112a4576101008083540402835291602001916112cf565b820191906000526020600020905b8154815290600101906020018083116112b257829003601f168201915b5050505050905090565b60006112e661016a611b90565b60006112f361016a611ba6565b90507f8030e83b04d87bef53480e26263266d6ca66863aa8506aca6f2559d18aa1cb67816040518082815260200191505060405180910390a18091505090565b6000806000611344846101686119a6565b915091508161135a57611355610ef0565b61135c565b805b92505050919050565b61136e336113f2565b151561137957600080fd5b61138281611bb4565b50565b61138e33611c0f565b565b600061010260009054906101000a900460ff161515156113af57600080fd5b6113b98383611c6a565b905092915050565b600061010260009054906101000a900460ff161515156113e057600080fd5b6113ea8383611d0f565b905092915050565b60006114098261019d61191290919063ffffffff16565b9050919050565b61020260009054906101000a900460ff16151515611479576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806128bb6025913960400191505060405180910390fd5b600161020260006101000a81548160ff02191690831515021790555061149e81611b36565b50565b600060019054906101000a900460ff16806114c057506114bf61176d565b5b806114d757506000809054906101000a900460ff16155b151561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806128e0602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561157e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61158782611d26565b80156115a85760008060016101000a81548160ff0219169083151502179055505b5050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600060019054906101000a900460ff1680611652575061165161176d565b5b8061166957506000809054906101000a900460ff16155b15156116c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806128e0602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611710576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61171b868686610da3565b611724336114a1565b61172d33611410565b801561174e5760008060016101000a81548160ff0219169083151502179055505b505050505050565b6000611763338484611e41565b6001905092915050565b600080303b90506000811491505090565b600061178b848484611fa4565b611824843361181f85603460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc690919063ffffffff16565b611e41565b600190509392505050565b60006118ca33846118c585603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe890919063ffffffff16565b611e41565b6001905092915050565b6118dd82612009565b6118e561205d565b6118ef8282612072565b5050565b6118fc82612009565b61190461205d565b61190e82826121c8565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561194f57600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806000841115156119b857600080fd5b6119c361016a611ba6565b84111515156119d157600080fd5b60006119e9858560000161231e90919063ffffffff16565b90508360000180549050811415611a0a576000808090509250925050611a2e565b60018460010182815481101515611a1d57fe5b906000526020600020015492509250505b9250929050565b611a498160cf6123d790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b611a9982826118f3565b611b328233611b2d84603460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc690919063ffffffff16565b611e41565b5050565b611b4a8160cf61248690919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b6001816000016000828254019250508190555050565b600081600001549050919050565b611bc98161019d61248690919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b611c248161019d6123d790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b6000611d053384611d0085603460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc690919063ffffffff16565b611e41565b6001905092915050565b6000611d1c338484611fa4565b6001905092915050565b600060019054906101000a900460ff1680611d455750611d4461176d565b5b80611d5c57506000809054906101000a900460ff16155b1515611db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806128e0602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611e03576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b611e0c826113f2565b1515611e1c57611e1b82611bb4565b5b8015611e3d5760008060016101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611e7d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611eb957600080fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b611fad83612009565b611fb682612009565b611fc1838383612536565b505050565b6000828211151515611fd757600080fd5b600082840390508091505092915050565b6000808284019050838110151515611fff57600080fd5b8091505092915050565b61205a61016760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206120558361110e565b612706565b50565b61207061016861206b610ef0565b612706565b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120ae57600080fd5b6120c381603554611fe890919063ffffffff16565b60358190555061211b81603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe890919063ffffffff16565b603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561220457600080fd5b61221981603554611fc690919063ffffffff16565b60358190555061227181603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc690919063ffffffff16565b603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000808380549050141561233557600090506123d1565b60008090506000848054905090505b8082101561238f576000612358838361278a565b905084868281548110151561236957fe5b9060005260206000200154111561238257809150612389565b6001810192505b50612344565b6000821180156123b957508385600184038154811015156123ac57fe5b9060005260206000200154145b156123cb5760018203925050506123d1565b81925050505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561241357600080fd5b61241d8282611912565b151561242857600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156124c257600080fd5b6124cc8282611912565b1515156124d857600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561257257600080fd5b6125c481603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fc690919063ffffffff16565b603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061265981603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611fe890919063ffffffff16565b603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600061271361016a611ba6565b905080612722846000016127d6565b10156127855782600001819080600181540180825580915050906001820390600052602060002001600090919290919091505550826001018290806001815401808255809150509060018203906000526020600020016000909192909190915055505b505050565b60006002808381151561279957fe5b066002858115156127a657fe5b06018115156127b157fe5b046002838115156127be57fe5b046002858115156127cb57fe5b040101905092915050565b600080828054905014156127ed5760009050612810565b81600183805490500381548110151561280257fe5b906000526020600020015490505b919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061285657805160ff1916838001178555612884565b82800160010185558215612884579182015b82811115612883578251825591602001919060010190612868565b5b5090506128919190612895565b5090565b6128b791905b808211156128b357600081600090555060010161289b565b5090565b9056fe7061757361626c652068617320616c7265616479206265656e20696e697469616c697a6564436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564a165627a7a7230582046259224235655ee14ce23e63011323563ef71df8c36746e87be05e1940237f10029