60806040523480156200001157600080fd5b5033600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000885760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200007f9190620001e2565b60405180910390fd5b6200009981620000a060201b60201c565b50620001ff565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055620000d681620000d960201b60201c565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001ca826200019d565b9050919050565b620001dc81620001bd565b82525050565b6000602082019050620001f96000830184620001d1565b92915050565b614906806200020f6000396000f3fe60806040526004361061019b5760003560e01c806379ba5097116100ec578063c4a0d4651161008a578063e985e9c511610064578063e985e9c5146105bf578063f242432a146105fc578063f2fde38b14610625578063f5298aca1461064e5761019b565b8063c4a0d4651461052c578063e30c397814610569578063e8a3d485146105945761019b565b8063a22cb465116100c6578063a22cb46514610474578063a7da716d1461049d578063b5644341146104c6578063b6cb8dfe146105035761019b565b806379ba5097146104075780638c0e83491461041e5780638da5cb5b146104495761019b565b80632edfe5a6116101595780634e1273f4116101335780634e1273f4146103475780634f64b2be146103845780635d05125b146103c5578063715018a6146103f05761019b565b80632edfe5a6146102d9578063392f37e9146103025780633ccfd60b146103305761019b565b8062fdd58e146101a057806301ffc9a7146101dd5780630e89341c1461021a5780631b2ef1ca146102575780631ffbee64146102735780632eb2c2d6146102b0575b600080fd5b3480156101ac57600080fd5b506101c760048036038101906101c29190612d5b565b610677565b6040516101d49190612daa565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190612e1d565b6106d2565b6040516102119190612e65565b60405180910390f35b34801561022657600080fd5b50610241600480360381019061023c9190612e80565b6107b4565b60405161024e9190612f3d565b60405180910390f35b610271600480360381019061026c9190612f5f565b610b09565b005b34801561027f57600080fd5b5061029a60048036038101906102959190612e80565b610c3e565b6040516102a79190612fae565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d291906131c6565b610c7d565b005b3480156102e557600080fd5b5061030060048036038101906102fb9190613336565b610d25565b005b34801561030e57600080fd5b50610317610e29565b6040516103279493929190613433565b60405180910390f35b34801561033c57600080fd5b50610345611067565b005b34801561035357600080fd5b5061036e60048036038101906103699190613557565b6110f6565b60405161037b919061368d565b60405180910390f35b34801561039057600080fd5b506103ab60048036038101906103a69190612e80565b6111ff565b6040516103bc959493929190613701565b60405180910390f35b3480156103d157600080fd5b506103da611389565b6040516103e79190612daa565b60405180910390f35b3480156103fc57600080fd5b5061040561138f565b005b34801561041357600080fd5b5061041c6113a3565b005b34801561042a57600080fd5b50610433611432565b6040516104409190612daa565b60405180910390f35b34801561045557600080fd5b5061045e611438565b60405161046b9190612fae565b60405180910390f35b34801561048057600080fd5b5061049b6004803603810190610496919061378e565b611461565b005b3480156104a957600080fd5b506104c460048036038101906104bf91906138d7565b611477565b005b3480156104d257600080fd5b506104ed60048036038101906104e89190612e80565b611718565b6040516104fa9190612daa565b60405180910390f35b34801561050f57600080fd5b5061052a600480360381019061052591906139b3565b611768565b005b34801561053857600080fd5b50610553600480360381019061054e9190613a27565b6118ee565b6040516105609190612daa565b60405180910390f35b34801561057557600080fd5b5061057e6119be565b60405161058b9190612fae565b60405180910390f35b3480156105a057600080fd5b506105a96119e8565b6040516105b69190612f3d565b60405180910390f35b3480156105cb57600080fd5b506105e660048036038101906105e19190613a54565b611a6d565b6040516105f39190612e65565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613a94565b611b01565b005b34801561063157600080fd5b5061064c60048036038101906106479190613a27565b611ba9565b005b34801561065a57600080fd5b5061067560048036038101906106709190613b2b565b611c56565b005b60006002600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061079d57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107ad57506107ac82611ced565b5b9050919050565b60606000600860008481526020019081526020016000206040518060c00160405290816000820180546107e690613bad565b80601f016020809104026020016040519081016040528092919081815260200182805461081290613bad565b801561085f5780601f106108345761010080835404028352916020019161085f565b820191906000526020600020905b81548152906001019060200180831161084257829003601f168201915b5050505050815260200160018201805461087890613bad565b80601f01602080910402602001604051908101604052809291908181526020018280546108a490613bad565b80156108f15780601f106108c6576101008083540402835291602001916108f1565b820191906000526020600020905b8154815290600101906020018083116108d457829003601f168201915b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561097f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610935575b505050505081526020016003820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016003820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016003820160089054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff1677ffffffffffffffffffffffffffffffffffffffffffffffff168152505090506009816060015163ffffffff1681548110610a5657610a55613bde565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae5ebf0b84836040518363ffffffff1660e01b8152600401610abb929190613dca565b600060405180830381865afa158015610ad8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190610b019190613e6a565b915050919050565b600a54821115610b45576040517f9430a17e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061ea6048610b559190613ee2565b905060008282610b659190613ee2565b905034811115610ba1576040517ff31a165400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b43610bab85611718565b1015610be3576040517f589ed34b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bfe33858560405180602001604052806000815250611d57565b837fce941df5850919f0613cec974b33d17502ac3aa3bf49dea99f90ee10b597e7bb8385604051610c30929190613f24565b60405180910390a250505050565b60098181548110610c4e57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610c87611df0565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015610ccc5750610cca8682611a6d565b155b15610d105780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401610d07929190613f4d565b60405180910390fd5b610d1d8686868686611df8565b505050505050565b6000600b541115610d62576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560046000019081610d749190614122565b508460046001019081610d879190614122565b508360046002019081610d9a9190614122565b508260046003019081610dad9190614122565b506009829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555043600b81905550610e2181611ef0565b505050505050565b6004806000018054610e3a90613bad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6690613bad565b8015610eb35780601f10610e8857610100808354040283529160200191610eb3565b820191906000526020600020905b815481529060010190602001808311610e9657829003601f168201915b505050505090806001018054610ec890613bad565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef490613bad565b8015610f415780601f10610f1657610100808354040283529160200191610f41565b820191906000526020600020905b815481529060010190602001808311610f2457829003601f168201915b505050505090806002018054610f5690613bad565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8290613bad565b8015610fcf5780601f10610fa457610100808354040283529160200191610fcf565b820191906000526020600020905b815481529060010190602001808311610fb257829003601f168201915b505050505090806003018054610fe490613bad565b80601f016020809104026020016040519081016040528092919081815260200182805461101090613bad565b801561105d5780601f106110325761010080835404028352916020019161105d565b820191906000526020600020905b81548152906001019060200180831161104057829003601f168201915b5050505050905084565b61106f611f21565b611077611438565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110bc573d6000803e3d6000fd5b507f4e70a604b23a8edee2b1d0a656e9b9c00b73ad8bb1afc2c59381ee9f69197de7476040516110ec9190612daa565b60405180910390a1565b6060815183511461114257815183516040517f5b059991000000000000000000000000000000000000000000000000000000008152600401611139929190613f24565b60405180910390fd5b6000835167ffffffffffffffff81111561115f5761115e612fce565b5b60405190808252806020026020018201604052801561118d5781602001602082028036833780820191505090505b50905060005b84518110156111f4576111ca6111b28287611fa890919063ffffffff16565b6111c58387611fbc90919063ffffffff16565b610677565b8282815181106111dd576111dc613bde565b5b602002602001018181525050806001019050611193565b508091505092915050565b600860205280600052604060002060009150905080600001805461122290613bad565b80601f016020809104026020016040519081016040528092919081815260200182805461124e90613bad565b801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b5050505050908060010180546112b090613bad565b80601f01602080910402602001604051908101604052809291908181526020018280546112dc90613bad565b80156113295780601f106112fe57610100808354040283529160200191611329565b820191906000526020600020905b81548152906001019060200180831161130c57829003601f168201915b5050505050908060030160009054906101000a900463ffffffff16908060030160049054906101000a900463ffffffff16908060030160089054906101000a900477ffffffffffffffffffffffffffffffffffffffffffffffff16905085565b600b5481565b611397611f21565b6113a16000611ef0565b565b60006113ad611df0565b90508073ffffffffffffffffffffffffffffffffffffffff166113ce6119be565b73ffffffffffffffffffffffffffffffffffffffff161461142657806040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161141d9190612fae565b60405180910390fd5b61142f81611ef0565b50565b600a5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61147361146c611df0565b8383611fd0565b5050565b61147f611f21565b60018261148c91906141f4565b63ffffffff1660098054905010156114d0576040517fa9a25f6700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a600081546114df9061422c565b91905081905550600060086000600a5481526020019081526020016000209050888882600001918261151292919061427f565b50868682600101918261152692919061427f565b50600b5443611535919061434f565b8160030160046101000a81548163ffffffff021916908363ffffffff160217905550828160030160006101000a81548163ffffffff021916908363ffffffff160217905550818160030160086101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555060008585905011156116ef576000816002018054905011156115f2578060020160006115f19190612c75565b5b60005b858590508160ff1610156116ed578160020161167a87878460ff168181106116205761161f613bde565b5b90506020028101906116329190614392565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612140565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080806116e590614402565b9150506115f5565b505b61170d33600a54600160405180602001604052806000815250611d57565b505050505050505050565b6000611c206008600084815260200190815260200160002060030160049054906101000a900463ffffffff1663ffffffff16600b54611757919061442b565b611761919061442b565b9050919050565b611770611f21565b600a5484116117aa576040517ea5a1f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600860008681526020019081526020016000209050600081600201805490501180156117d55750815b156117eb578060020160006117ea9190612c75565b5b60005b848490508160ff1610156118e6578160020161187386868460ff1681811061181957611818613bde565b5b905060200281019061182b9190614392565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612140565b9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080806118de90614402565b9150506117ee565b505050505050565b60006118f8611f21565b6009829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160098054905061196f919061434f565b9050808373ffffffffffffffffffffffffffffffffffffffff167fbe12a6cdcfa8711b87484030475533b479a18855d1d39eb97f1f0f3fd6e111ff60405160405180910390a380915050919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60607305a9ee6f3fbe0522d05856c007995c792015547b63033918d360046040518263ffffffff1660e01b8152600401611a22919061456a565b600060405180830381865af4158015611a3f573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a689190613e6a565b905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000611b0b611df0565b90508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015611b505750611b4e8682611a6d565b155b15611b945780866040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611b8b929190613f4d565b60405180910390fd5b611ba1868686868661220a565b505050505050565b611bb1611f21565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16611c11611438565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611c995750611c978333611a6d565b155b15611cdd5733836040517fe237d922000000000000000000000000000000000000000000000000000000008152600401611cd4929190613f4d565b60405180910390fd5b611ce8838383612315565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611dc95760006040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611dc09190612fae565b60405180910390fd5b600080611dd685856123bc565b91509150611de86000878484876123ec565b505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e6a5760006040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401611e619190612fae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611edc5760006040517f01a83514000000000000000000000000000000000000000000000000000000008152600401611ed39190612fae565b60405180910390fd5b611ee985858585856123ec565b5050505050565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055611f1e8161249e565b50565b611f29611df0565b73ffffffffffffffffffffffffffffffffffffffff16611f47611438565b73ffffffffffffffffffffffffffffffffffffffff1614611fa657611f6a611df0565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611f9d9190612fae565b60405180910390fd5b565b600060208202602084010151905092915050565b600060208202602084010151905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120425760006040517fced3e1000000000000000000000000000000000000000000000000000000000081526004016120399190612fae565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121339190612e65565b60405180910390a3505050565b60008082604051602001612154919061460a565b60405160208183030381529060405290506000816040516020016121789190614678565b60405160208183030381529060405290508051602082016000f09250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa906146e6565b60405180910390fd5b5050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361227c5760006040517f57f447ce0000000000000000000000000000000000000000000000000000000081526004016122739190612fae565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036122ee5760006040517f01a835140000000000000000000000000000000000000000000000000000000081526004016122e59190612fae565b60405180910390fd5b6000806122fb85856123bc565b9150915061230c87878484876123ec565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123875760006040517f01a8351400000000000000000000000000000000000000000000000000000000815260040161237e9190612fae565b60405180910390fd5b60008061239484846123bc565b915091506123b58560008484604051806020016040528060008152506123ec565b5050505050565b60608060405191506001825283602083015260408201905060018152826020820152604081016040529250929050565b6123f885858585612562565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612497576000612436611df0565b90506001845103612486576000612457600086611fbc90919063ffffffff16565b9050600061246f600086611fbc90919063ffffffff16565b905061247f83898985858961290d565b5050612495565b612494818787878787612ac1565b5b505b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80518251146125ac57815181516040517f5b0599910000000000000000000000000000000000000000000000000000000081526004016125a3929190613f24565b60405180910390fd5b60006125b6611df0565b905060005b83518110156127c85760006125d98286611fbc90919063ffffffff16565b905060006125f08386611fbc90919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461271f5760006002600084815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126c657888183856040517f03dee4c50000000000000000000000000000000000000000000000000000000081526004016126bd9493929190614706565b60405180910390fd5b8181036002600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16146127bb57806002600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127b3919061442b565b925050819055505b50508060010190506125bb565b5060018351036128875760006127e8600085611fbc90919063ffffffff16565b90506000612800600085611fbc90919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612878929190613f24565b60405180910390a45050612906565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516128fd92919061474b565b60405180910390a45b5050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b1115612ab9578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b815260040161296e9594939291906147cc565b6020604051808303816000875af19250505080156129aa57506040513d601f19601f820116820180604052508101906129a7919061483b565b60015b612a2e573d80600081146129da576040519150601f19603f3d011682016040523d82523d6000602084013e6129df565b606091505b506000815103612a2657846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612a1d9190612fae565b60405180910390fd5b805181602001fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612ab757846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612aae9190612fae565b60405180910390fd5b505b505050505050565b60008473ffffffffffffffffffffffffffffffffffffffff163b1115612c6d578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612b22959493929190614868565b6020604051808303816000875af1925050508015612b5e57506040513d601f19601f82011682018060405250810190612b5b919061483b565b60015b612be2573d8060008114612b8e576040519150601f19603f3d011682016040523d82523d6000602084013e612b93565b606091505b506000815103612bda57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612bd19190612fae565b60405180910390fd5b805181602001fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612c6b57846040517f57f447ce000000000000000000000000000000000000000000000000000000008152600401612c629190612fae565b60405180910390fd5b505b505050505050565b5080546000825590600052602060002090810190612c939190612c96565b50565b5b80821115612caf576000816000905550600101612c97565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cf282612cc7565b9050919050565b612d0281612ce7565b8114612d0d57600080fd5b50565b600081359050612d1f81612cf9565b92915050565b6000819050919050565b612d3881612d25565b8114612d4357600080fd5b50565b600081359050612d5581612d2f565b92915050565b60008060408385031215612d7257612d71612cbd565b5b6000612d8085828601612d10565b9250506020612d9185828601612d46565b9150509250929050565b612da481612d25565b82525050565b6000602082019050612dbf6000830184612d9b565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612dfa81612dc5565b8114612e0557600080fd5b50565b600081359050612e1781612df1565b92915050565b600060208284031215612e3357612e32612cbd565b5b6000612e4184828501612e08565b91505092915050565b60008115159050919050565b612e5f81612e4a565b82525050565b6000602082019050612e7a6000830184612e56565b92915050565b600060208284031215612e9657612e95612cbd565b5b6000612ea484828501612d46565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ee7578082015181840152602081019050612ecc565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f0f82612ead565b612f198185612eb8565b9350612f29818560208601612ec9565b612f3281612ef3565b840191505092915050565b60006020820190508181036000830152612f578184612f04565b905092915050565b60008060408385031215612f7657612f75612cbd565b5b6000612f8485828601612d46565b9250506020612f9585828601612d46565b9150509250929050565b612fa881612ce7565b82525050565b6000602082019050612fc36000830184612f9f565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61300682612ef3565b810181811067ffffffffffffffff8211171561302557613024612fce565b5b80604052505050565b6000613038612cb3565b90506130448282612ffd565b919050565b600067ffffffffffffffff82111561306457613063612fce565b5b602082029050602081019050919050565b600080fd5b600061308d61308884613049565b61302e565b905080838252602082019050602084028301858111156130b0576130af613075565b5b835b818110156130d957806130c58882612d46565b8452602084019350506020810190506130b2565b5050509392505050565b600082601f8301126130f8576130f7612fc9565b5b813561310884826020860161307a565b91505092915050565b600080fd5b600067ffffffffffffffff82111561313157613130612fce565b5b61313a82612ef3565b9050602081019050919050565b82818337600083830152505050565b600061316961316484613116565b61302e565b90508281526020810184848401111561318557613184613111565b5b613190848285613147565b509392505050565b600082601f8301126131ad576131ac612fc9565b5b81356131bd848260208601613156565b91505092915050565b600080600080600060a086880312156131e2576131e1612cbd565b5b60006131f088828901612d10565b955050602061320188828901612d10565b945050604086013567ffffffffffffffff81111561322257613221612cc2565b5b61322e888289016130e3565b935050606086013567ffffffffffffffff81111561324f5761324e612cc2565b5b61325b888289016130e3565b925050608086013567ffffffffffffffff81111561327c5761327b612cc2565b5b61328888828901613198565b9150509295509295909350565b600067ffffffffffffffff8211156132b0576132af612fce565b5b6132b982612ef3565b9050602081019050919050565b60006132d96132d484613295565b61302e565b9050828152602081018484840111156132f5576132f4613111565b5b613300848285613147565b509392505050565b600082601f83011261331d5761331c612fc9565b5b813561332d8482602086016132c6565b91505092915050565b60008060008060008060c0878903121561335357613352612cbd565b5b600087013567ffffffffffffffff81111561337157613370612cc2565b5b61337d89828a01613308565b965050602087013567ffffffffffffffff81111561339e5761339d612cc2565b5b6133aa89828a01613308565b955050604087013567ffffffffffffffff8111156133cb576133ca612cc2565b5b6133d789828a01613308565b945050606087013567ffffffffffffffff8111156133f8576133f7612cc2565b5b61340489828a01613308565b935050608061341589828a01612d10565b92505060a061342689828a01612d10565b9150509295509295509295565b6000608082019050818103600083015261344d8187612f04565b905081810360208301526134618186612f04565b905081810360408301526134758185612f04565b905081810360608301526134898184612f04565b905095945050505050565b600067ffffffffffffffff8211156134af576134ae612fce565b5b602082029050602081019050919050565b60006134d36134ce84613494565b61302e565b905080838252602082019050602084028301858111156134f6576134f5613075565b5b835b8181101561351f578061350b8882612d10565b8452602084019350506020810190506134f8565b5050509392505050565b600082601f83011261353e5761353d612fc9565b5b813561354e8482602086016134c0565b91505092915050565b6000806040838503121561356e5761356d612cbd565b5b600083013567ffffffffffffffff81111561358c5761358b612cc2565b5b61359885828601613529565b925050602083013567ffffffffffffffff8111156135b9576135b8612cc2565b5b6135c5858286016130e3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61360481612d25565b82525050565b600061361683836135fb565b60208301905092915050565b6000602082019050919050565b600061363a826135cf565b61364481856135da565b935061364f836135eb565b8060005b83811015613680578151613667888261360a565b975061367283613622565b925050600181019050613653565b5085935050505092915050565b600060208201905081810360008301526136a7818461362f565b905092915050565b600063ffffffff82169050919050565b6136c8816136af565b82525050565b600077ffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6136fb816136ce565b82525050565b600060a082019050818103600083015261371b8188612f04565b9050818103602083015261372f8187612f04565b905061373e60408301866136bf565b61374b60608301856136bf565b61375860808301846136f2565b9695505050505050565b61376b81612e4a565b811461377657600080fd5b50565b60008135905061378881613762565b92915050565b600080604083850312156137a5576137a4612cbd565b5b60006137b385828601612d10565b92505060206137c485828601613779565b9150509250929050565b600080fd5b60008083601f8401126137e9576137e8612fc9565b5b8235905067ffffffffffffffff811115613806576138056137ce565b5b60208301915083600182028301111561382257613821613075565b5b9250929050565b60008083601f84011261383f5761383e612fc9565b5b8235905067ffffffffffffffff81111561385c5761385b6137ce565b5b60208301915083602082028301111561387857613877613075565b5b9250929050565b613888816136af565b811461389357600080fd5b50565b6000813590506138a58161387f565b92915050565b6138b4816136ce565b81146138bf57600080fd5b50565b6000813590506138d1816138ab565b92915050565b60008060008060008060008060a0898b0312156138f7576138f6612cbd565b5b600089013567ffffffffffffffff81111561391557613914612cc2565b5b6139218b828c016137d3565b9850985050602089013567ffffffffffffffff81111561394457613943612cc2565b5b6139508b828c016137d3565b9650965050604089013567ffffffffffffffff81111561397357613972612cc2565b5b61397f8b828c01613829565b945094505060606139928b828c01613896565b92505060806139a38b828c016138c2565b9150509295985092959890939650565b600080600080606085870312156139cd576139cc612cbd565b5b60006139db87828801612d46565b945050602085013567ffffffffffffffff8111156139fc576139fb612cc2565b5b613a0887828801613829565b93509350506040613a1b87828801613779565b91505092959194509250565b600060208284031215613a3d57613a3c612cbd565b5b6000613a4b84828501612d10565b91505092915050565b60008060408385031215613a6b57613a6a612cbd565b5b6000613a7985828601612d10565b9250506020613a8a85828601612d10565b9150509250929050565b600080600080600060a08688031215613ab057613aaf612cbd565b5b6000613abe88828901612d10565b9550506020613acf88828901612d10565b9450506040613ae088828901612d46565b9350506060613af188828901612d46565b925050608086013567ffffffffffffffff811115613b1257613b11612cc2565b5b613b1e88828901613198565b9150509295509295909350565b600080600060608486031215613b4457613b43612cbd565b5b6000613b5286828701612d10565b9350506020613b6386828701612d46565b9250506040613b7486828701612d46565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bc557607f821691505b602082108103613bd857613bd7613b7e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b6000613c2982612ead565b613c338185613c0d565b9350613c43818560208601612ec9565b613c4c81612ef3565b840191505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c8c81612ce7565b82525050565b6000613c9e8383613c83565b60208301905092915050565b6000602082019050919050565b6000613cc282613c57565b613ccc8185613c62565b9350613cd783613c73565b8060005b83811015613d08578151613cef8882613c92565b9750613cfa83613caa565b925050600181019050613cdb565b5085935050505092915050565b613d1e816136af565b82525050565b613d2d816136ce565b82525050565b600060c0830160008301518482036000860152613d508282613c1e565b91505060208301518482036020860152613d6a8282613c1e565b91505060408301518482036040860152613d848282613cb7565b9150506060830151613d996060860182613d15565b506080830151613dac6080860182613d15565b5060a0830151613dbf60a0860182613d24565b508091505092915050565b6000604082019050613ddf6000830185612d9b565b8181036020830152613df18184613d33565b90509392505050565b6000613e0d613e0884613295565b61302e565b905082815260208101848484011115613e2957613e28613111565b5b613e34848285612ec9565b509392505050565b600082601f830112613e5157613e50612fc9565b5b8151613e61848260208601613dfa565b91505092915050565b600060208284031215613e8057613e7f612cbd565b5b600082015167ffffffffffffffff811115613e9e57613e9d612cc2565b5b613eaa84828501613e3c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613eed82612d25565b9150613ef883612d25565b9250828202613f0681612d25565b91508282048414831517613f1d57613f1c613eb3565b5b5092915050565b6000604082019050613f396000830185612d9b565b613f466020830184612d9b565b9392505050565b6000604082019050613f626000830185612f9f565b613f6f6020830184612f9f565b9392505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613fd87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613f9b565b613fe28683613f9b565b95508019841693508086168417925050509392505050565b6000819050919050565b600061401f61401a61401584612d25565b613ffa565b612d25565b9050919050565b6000819050919050565b61403983614004565b61404d61404582614026565b848454613fa8565b825550505050565b600090565b614062614055565b61406d818484614030565b505050565b5b818110156140915761408660008261405a565b600181019050614073565b5050565b601f8211156140d6576140a781613f76565b6140b084613f8b565b810160208510156140bf578190505b6140d36140cb85613f8b565b830182614072565b50505b505050565b600082821c905092915050565b60006140f9600019846008026140db565b1980831691505092915050565b600061411283836140e8565b9150826002028217905092915050565b61412b82612ead565b67ffffffffffffffff81111561414457614143612fce565b5b61414e8254613bad565b614159828285614095565b600060209050601f83116001811461418c576000841561417a578287015190505b6141848582614106565b8655506141ec565b601f19841661419a86613f76565b60005b828110156141c25784890151825560018201915060208501945060208101905061419d565b868310156141df57848901516141db601f8916826140e8565b8355505b6001600288020188555050505b505050505050565b60006141ff826136af565b915061420a836136af565b9250828201905063ffffffff81111561422657614225613eb3565b5b92915050565b600061423782612d25565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361426957614268613eb3565b5b600182019050919050565b600082905092915050565b6142898383614274565b67ffffffffffffffff8111156142a2576142a1612fce565b5b6142ac8254613bad565b6142b7828285614095565b6000601f8311600181146142e657600084156142d4578287013590505b6142de8582614106565b865550614346565b601f1984166142f486613f76565b60005b8281101561431c578489013582556001820191506020850194506020810190506142f7565b868310156143395784890135614335601f8916826140e8565b8355505b6001600288020188555050505b50505050505050565b600061435a82612d25565b915061436583612d25565b925082820390508181111561437d5761437c613eb3565b5b92915050565b600080fd5b600080fd5b600080fd5b600080833560016020038436030381126143af576143ae614383565b5b80840192508235915067ffffffffffffffff8211156143d1576143d0614388565b5b6020830192506001820236038313156143ed576143ec61438d565b5b509250929050565b600060ff82169050919050565b600061440d826143f5565b915060ff82036144205761441f613eb3565b5b600182019050919050565b600061443682612d25565b915061444183612d25565b925082820190508082111561445957614458613eb3565b5b92915050565b600082825260208201905092915050565b6000815461447d81613bad565b614487818661445f565b945060018216600081146144a257600181146144b8576144eb565b60ff1983168652811515602002860193506144eb565b6144c185613f76565b60005b838110156144e3578154818901526001820191506020810190506144c4565b808801955050505b50505092915050565b600060808301600080840185830360008701526145118382614470565b92505060018401858303602087015261452a8382614470565b9250506002840185830360408701526145438382614470565b92505060038401858303606087015261455c8382614470565b925050819250505092915050565b6000602082019050818103600083015261458481846144f4565b905092915050565b600081905092915050565b60008082015250565b60006145ad60018361458c565b91506145b882614597565b600182019050919050565b600081519050919050565b600081905092915050565b60006145e4826145c3565b6145ee81856145ce565b93506145fe818560208601612ec9565b80840191505092915050565b6000614615826145a0565b915061462182846145d9565b915081905092915050565b7f600b5981380380925939f3000000000000000000000000000000000000000000600082015250565b6000614662600b8361458c565b915061466d8261462c565b600b82019050919050565b600061468382614655565b915061468f82846145d9565b915081905092915050565b7f4445504c4f594d454e545f4641494c4544000000000000000000000000000000600082015250565b60006146d0601183612eb8565b91506146db8261469a565b602082019050919050565b600060208201905081810360008301526146ff816146c3565b9050919050565b600060808201905061471b6000830187612f9f565b6147286020830186612d9b565b6147356040830185612d9b565b6147426060830184612d9b565b95945050505050565b60006040820190508181036000830152614765818561362f565b90508181036020830152614779818461362f565b90509392505050565b600082825260208201905092915050565b600061479e826145c3565b6147a88185614782565b93506147b8818560208601612ec9565b6147c181612ef3565b840191505092915050565b600060a0820190506147e16000830188612f9f565b6147ee6020830187612f9f565b6147fb6040830186612d9b565b6148086060830185612d9b565b818103608083015261481a8184614793565b90509695505050505050565b60008151905061483581612df1565b92915050565b60006020828403121561485157614850612cbd565b5b600061485f84828501614826565b91505092915050565b600060a08201905061487d6000830188612f9f565b61488a6020830187612f9f565b818103604083015261489c818661362f565b905081810360608301526148b0818561362f565b905081810360808301526148c48184614793565b9050969550505050505056fea26469706673582212207ef1517d01a3fc146729d6d5d5589c8ccefe127c46fc9a51cd6b8974eb51503164736f6c63430008180033