{"version":3,"file":"components/chunks/iframe-resizer.88ca1520e06c80f8e71e.js","mappings":"0FAAAA,EAAQC,cAAgB,EAAxB,OACAD,EAAQE,2BAA6B,EAArC,M,qBCUA,SAAUC,GACR,aAEA,GAAsB,oBAAXC,OAAX,CAEA,IAAIC,GAAa,EAEfC,EAAiB,GACjBC,EAAa,EACbC,EAAgB,GAChBC,EAAe,KACfC,EAAc,GACdC,GAAiB,EACjBC,EAAkB,CAAEC,OAAQ,EAAGC,MAAO,GACtCC,EAAmB,IACnBC,GAAW,EACXC,EAAS,EACTC,EAAwB,aACxBC,EAAiBD,EACjBE,GAAW,EACXC,EAAU,GACVC,EAAc,CAAC,EACfC,EAAW,GACXC,EAAgB,KAChBC,GAAU,EACVC,EAAQ,gBAERC,EAAO,GAEPC,EAAuB,CACrBC,IAAK,EACLC,IAAK,EACLC,WAAY,EACZC,sBAAuB,GAEzBC,EAAa,QACbC,GAAa,EACbC,EAAS/B,OAAOgC,OAChBC,EAAsB,IACtBC,EAAY,EACZC,GAAgB,EAChBC,EAAqB,KACrBC,EAAiB,GACjBC,EAAQ,EACRC,EAAuB,SACvBC,EAAgBD,EAChBE,EAAMzC,OACN0C,EAAkB,WAChBC,GAAK,uCACP,EACAC,EAAgB,WAAY,EAC5BC,EAAmB,WAAY,EAC/BC,EAAoB,CAClBjC,OAAQ,WAEN,OADA8B,GAAK,kDACEI,SAASC,gBAAgBC,YAClC,EACAX,MAAO,WAEL,OADAK,GAAK,iDACEI,SAASG,KAAKC,WACvB,GAEFC,EAAsB,CAAC,EACvBC,GAAmB,EAKrB,IACE,IAAIC,EAAUC,OAAOC,OACnB,CAAC,EACD,CACEC,QAAS,CACPC,IAAK,WACHL,GAAmB,CACrB,GAEFM,KAAM,CACJD,IAAK,WACHE,CACF,KAIN5D,OAAO6D,iBAAiB,OAAQC,GAAMR,GACtCtD,OAAO+D,oBAAoB,OAAQD,GAAMR,EAC3C,CAAE,MAAOU,GAET,CA0EA,IA/CkBC,EACZC,EACFC,EACAC,EACAC,EACAC,EACAC,EAyCAC,EACFC,KAAKC,KACL,WAEE,OAAO,IAAID,MAAOE,SACpB,EAmwBEC,EAAY,CACZC,WAAY,WACV,OACE9B,SAASG,KAAKD,aACd6B,GAAiB,aACjBA,GAAiB,eAErB,EAEAC,OAAQ,WACN,OAAOH,EAAUC,YACnB,EAEAlD,WAAY,WACV,OAAOoB,SAASG,KAAK8B,YACvB,EAEAC,OAAQ,WACN,OAAOnC,EAAkBjC,QAC3B,EAEAqE,sBAAuB,WACrB,OAAOnC,SAASC,gBAAgBC,YAClC,EAEArB,sBAAuB,WACrB,OAAOmB,SAASC,gBAAgBgC,YAClC,EAEAvD,IAAK,WACH,OAAO0D,KAAK1D,IAAI2D,MAAM,KAAMC,GAAmBT,GACjD,EAEAlD,IAAK,WACH,OAAOyD,KAAKzD,IAAI0D,MAAM,KAAMC,GAAmBT,GACjD,EAEAU,KAAM,WACJ,OAAOV,EAAUnD,KACnB,EAEA8D,cAAe,WACb,OAAOJ,KAAK1D,IACVmD,EAAUC,cAAgBD,EAAUM,wBACpCM,GAAc,SAAUC,MAE5B,EAEAC,cAAe,WACb,OAAOC,GAAkB,SAAU,qBACrC,GAEFC,EAAW,CACTjE,WAAY,WACV,OAAOoB,SAASG,KAAKC,WACvB,EAEA0B,WAAY,WACV,OAAO9B,SAASG,KAAK2C,WACvB,EAEAZ,OAAQ,WACN,OAAOnC,EAAkBR,OAC3B,EAEAV,sBAAuB,WACrB,OAAOmB,SAASC,gBAAgBG,WAClC,EAEA+B,sBAAuB,WACrB,OAAOnC,SAASC,gBAAgB6C,WAClC,EAEAC,OAAQ,WACN,OAAOX,KAAK1D,IACVmE,EAASjE,aACTiE,EAAShE,wBAEb,EAEAH,IAAK,WACH,OAAO0D,KAAK1D,IAAI2D,MAAM,KAAMC,GAAmBO,GACjD,EAEAlE,IAAK,WACH,OAAOyD,KAAKzD,IAAI0D,MAAM,KAAMC,GAAmBO,GACjD,EAEAG,iBAAkB,WAChB,OAAOP,GAAc,QAASC,KAChC,EAEAC,cAAe,WACb,OAAOC,GAAkB,QAAS,oBACpC,GAkEAK,GAv9Bc/B,EAu9BiBgC,GAn9B/B5B,EAAU,KACVC,EAAW,EACXC,EAAQ,WACND,EAAWE,IACXH,EAAU,KACVD,EAASH,EAAKmB,MAAMlB,EAASC,GACxBE,IACHH,EAAUC,EAAO,KAErB,EAEK,WACL,IAAIO,EAAMF,IAELF,IACHA,EAAWI,GAGb,IAAIwB,EAAY7D,GAAkBqC,EAAMJ,GAqBxC,OAnBAJ,EAAUiC,KACVhC,EAAOiC,UAEHF,GAAa,GAAKA,EAAY7D,GAC5BgC,IACFgC,aAAahC,GACbA,EAAU,MAGZC,EAAWI,EACXN,EAASH,EAAKmB,MAAMlB,EAASC,GAExBE,IACHH,EAAUC,EAAO,OAETE,IACVA,EAAUiC,WAAW/B,EAAO2B,IAGvB9B,CACT,GAqnCFP,GAAiB7D,OAAQ,UAAWuG,IACpC1C,GAAiB7D,OAAQ,mBAAoBwG,IAC7CA,IAnxCyC,CA+DzC,SAAS1C,KAAQ,CAwBjB,SAASD,GAAiB4C,EAAIC,EAAKzC,EAAMX,GAEnC,qBAAsBtD,OACxByG,EAAG5C,iBAAiB6C,EAAKzC,IAAMZ,IAAmBC,GAAW,CAAC,IACrD,gBAAiBtD,QAE1ByG,EAAGE,YAAY,KAAOD,EAAKzC,EAE/B,CAEA,SAASF,GAAoB0C,EAAIC,EAAKzC,GAEhC,wBAAyBjE,OAC3ByG,EAAG1C,oBAAoB2C,EAAKzC,GAAM,GACzB,gBAAiBjE,QAE1ByG,EAAGG,YAAY,KAAOF,EAAKzC,EAE/B,CAEA,SAAS4C,GAAsBC,GAC7B,OAAOA,EAAOC,OAAO,GAAGC,cAAgBF,EAAOG,MAAM,EACvD,CAyDA,SAASC,GAAaC,GACpB,OAAO7F,EAAQ,IAAMC,EAAdD,KAAiC6F,CAC1C,CAEA,SAASC,GAAID,GACP9F,GAAW,iBAAoBrB,OAAOqH,SACxCA,QAAQD,IAAIF,GAAaC,GAE7B,CAEA,SAASxE,GAAKwE,GACR,iBAAoBnH,OAAOqH,SAC7BA,QAAQ1E,KAAKuE,GAAaC,GAE9B,CAEA,SAASG,KAiUT,IACMC,GAhTN,WACE,SAASC,EAAQC,GACf,MAAO,SAAWA,CACpB,CAEA,IAAIC,EAAOzG,EAAQ0G,OAtLRrG,IAsLyBsG,MAAM,KAE1CrG,EAAOmG,EAAK,GACZvH,EAAaJ,IAAc2H,EAAK,GAAKG,OAAOH,EAAK,IAAMvH,EACvDI,EAAiBR,IAAc2H,EAAK,GAAKF,EAAQE,EAAK,IAAMnH,EAC5Dc,EAAUtB,IAAc2H,EAAK,GAAKF,EAAQE,EAAK,IAAMrG,EACrDF,EAAWpB,IAAc2H,EAAK,GAAKG,OAAOH,EAAK,IAAMvG,EACrDlB,EAAaF,IAAc2H,EAAK,GAAKF,EAAQE,EAAK,IAAMzH,EACxDG,EAAgBsH,EAAK,GACrB3G,EAAiBhB,IAAc2H,EAAK,GAAKA,EAAK,GAAK3G,EACnDb,EAAiBwH,EAAK,GACtBpH,EAAcoH,EAAK,IACnBxF,EAAYnC,IAAc2H,EAAK,IAAMG,OAAOH,EAAK,KAAOxF,EACxDhB,EAAY4G,OAAS/H,IAAc2H,EAAK,KAAMF,EAAQE,EAAK,KAC3D7F,EAAa9B,IAAc2H,EAAK,IAAMA,EAAK,IAAM7F,EACjDW,EAAgBzC,IAAc2H,EAAK,IAAMA,EAAK,IAAMlF,CACtD,CAtCEuF,GACAX,GAAI,wBAA0BY,SAASC,KAAO,KAuChD,WACE,SAASC,IACP,IAAIR,EAAO1H,OAAOmI,cAElBf,GAAI,2BAA6BgB,KAAKC,UAAUX,IAEhDhF,EACE,oBAAqBgF,EAAOA,EAAKhF,gBAAkBA,EACrDE,EACE,kBAAmB8E,EAAOA,EAAK9E,cAAgBA,EACjDX,EACE,iBAAkByF,EAAOA,EAAKY,aAAerG,EAC/ClB,EACE,4BAA6B2G,EACzBA,EAAKa,wBACLxH,EACNyB,EACE,2BAA4BkF,EACxBA,EAAKc,uBACLhG,CACR,CAEA,SAASiG,EAAuBC,EAAUC,GAOxC,MANI,mBAAsBD,IACxBtB,GAAI,gBAAkBuB,EAAW,cACjC7F,EAAkB6F,GAAYD,EAC9BA,EAAW,UAGNA,CACT,CAGE,kBAAmB1I,QACnBuD,SAAWvD,OAAOmI,cAAcS,cAEhCV,IACAnH,EAAiB0H,EAAuB1H,EAAgB,UACxDyB,EAAgBiG,EAAuBjG,EAAe,UAGxD4E,GAAI,mCAAqCnF,EAC3C,CAhFE4G,GAiGF,WAEM9I,IAAcK,IAChBA,EAAgBD,EAAa,MAG/B2I,GAAa,SArBf,SAAgBC,EAAMC,IACf,IAAMA,EAAMC,QAAQ,OACvBtG,GAAK,kCAAoCoG,GACzCC,EAAQ,IAEV,OAAOA,CACT,CAeyBE,CAAO,SAAU9I,GAC1C,CAvGE+I,GACAL,GAAa,aAAc5I,GAC3B4I,GAAa,UAAWxI,IA4TpBiH,EAAWxE,SAASqG,cAAc,QAC7BC,MAAMC,MAAQ,OACvB/B,EAAS8B,MAAME,QAAU,QACzBxG,SAASG,KAAKsG,YAAYjC,GA7T1BkC,KACAC,KAqGA3G,SAASC,gBAAgBqG,MAAMxI,OAAS,GACxCkC,SAASG,KAAKmG,MAAMxI,OAAS,GAC7BuG,GAAI,oCA8UJA,GAAI,yBAEJ3E,EAAIkH,aAAe,CACjB1J,WAAY,SAAqBQ,GAU/B,OATI,IAASA,IAAU,IAAUR,GAC/BA,GAAa,EACb2J,OAES,IAAUnJ,IAAU,IAASR,IACtCA,GAAa,EACb4J,MAGK5J,CACT,EAEA6J,MAAO,WACLC,GAAQ,EAAG,EAAG,SA1KlB3C,GAAI,6BACJtF,GAAa,EAIbsF,GAAI,kCACJrD,GAAoB/D,OAAQ,UAAWuG,KAmBnC,IAAStG,GAAY4J,IAmJvB,EAEAG,MAAO,WACL,OAAOzI,CACT,EAEA0I,YAAa,SAAsBC,GAC7B,mBAAsBA,GACxBrH,EAAmBqH,EACnBH,GAAQ,EAAG,EAAG,cAEdlH,EAAmB,WAAY,EAC/BkH,GAAQ,EAAG,EAAG,gBAElB,EAEAI,aAAc,SAAuBC,GACnClJ,EAAYmJ,WAAWD,EACzB,EAEAE,MAAO,WACLC,GAAY,qBACd,EAEAC,SAAU,SAAmBC,EAAGC,GAC9BX,GAAQW,EAAGD,EAAG,WAChB,EAEAE,eAAgB,SAAmBF,EAAGC,GACpCX,GAAQW,EAAGD,EAAG,iBAChB,EAEAG,YAAa,SAAsBzD,EAAKmB,GACtCyB,GAAQ,EAAG,EAAG,UAAW3B,KAAKC,UAAUlB,GAAMmB,EAChD,EAEAuC,2BAA4B,SAC1BtC,GAEAxH,EAAiBwH,EACjBkB,IACF,EAEAqB,0BAA2B,SACzBtC,GAEAhG,EAAgBgG,EAChBkB,IACF,EAEAqB,gBAAiB,SAA0BzC,GACzClB,GAAI,qBAAuBkB,GAC3BrG,EAAsBqG,CACxB,EAEA0C,KAAM,SAAeC,EAAcC,GAMjCC,GACE,OACA,sBALCF,GAA8B,KAC9BC,EAAc,IAAMA,EAAc,IAIA,IACnCD,EACAC,EAEJ,GAxgBFtB,KACA1I,EA2TF,WACE,SAASkK,IACP,MAAO,CACLX,EACEzK,OAAOqL,cAAgBtL,EACnBC,OAAOqL,YACPtI,SAASC,gBAAgBsI,WAC/BZ,EACE1K,OAAOuL,cAAgBxL,EACnBC,OAAOuL,YACPxI,SAASC,gBAAgBwI,UAEnC,CAEA,SAASC,EAAmBhF,GAC1B,IAAIiF,EAAajF,EAAGkF,wBAClBC,EAAeR,IAEjB,MAAO,CACLX,EAAGoB,SAASH,EAAWI,KAAM,IAAMD,SAASD,EAAanB,EAAG,IAC5DC,EAAGmB,SAASH,EAAWK,IAAK,IAAMF,SAASD,EAAalB,EAAG,IAE/D,CAEA,SAASL,EAAWrC,GAClB,SAASgE,EAAajK,GACpB,IAAIkK,EAAeR,EAAmB1J,GAEtCqF,GACE,4BACEgD,EACA,WACA6B,EAAaxB,EACb,OACAwB,EAAavB,GAEjBX,GAAQkC,EAAavB,EAAGuB,EAAaxB,EAAG,iBAC1C,CAEA,IAAIL,EAAOpC,EAASJ,MAAM,KAAK,IAAMI,EACnCkE,EAAWC,mBAAmB/B,GAC9BrI,EACEgB,SAASqJ,eAAeF,IACxBnJ,SAASsJ,kBAAkBH,GAAU,GAErCnM,IAAcgC,EAChBiK,EAAajK,IAEbqF,GACE,kBACEgD,EACA,+CAEJL,GAAQ,EAAG,EAAG,aAAc,IAAMK,GAEtC,CAEA,SAASkC,IACH,KAAOtE,SAASoC,MAAQ,MAAQpC,SAASoC,MAC3CC,EAAWrC,SAASC,KAExB,CAEA,SAASsE,IACP,SAASC,EAAU/F,GACjB,SAASgG,EAAYzI,GACnBA,EAAE0I,iBAGFrC,EAAWlE,KAAKwG,aAAa,QAC/B,CAEI,MAAQlG,EAAGkG,aAAa,SAC1B9I,GAAiB4C,EAAI,QAASgG,EAElC,CAEAG,MAAMC,UAAUC,QAAQC,KACtBhK,SAASiK,iBAAiB,gBAC1BR,EAEJ,CAEA,SAASS,IACPpJ,GAAiB7D,OAAQ,aAAcsM,EACzC,CAEA,SAASY,IAEP5G,WAAWgG,EAAmB3L,EAChC,CAEA,SAASwM,IAEHP,MAAMC,UAAUC,SAAW/J,SAASiK,kBACtC5F,GAAI,qCACJmF,IACAU,IACAC,KAEAvK,GACE,0FAGN,CAEIzB,EAAY4G,OACdqF,IAEA/F,GAAI,+BAGN,MAAO,CACLiD,WAAYA,EAEhB,CA9agB+C,GACdjC,GAAS,OAAQ,+BACjBvI,GACF,CA6EA,SAASkG,GAAaC,EAAMC,GACtBjJ,IAAciJ,GAAS,KAAOA,GAAS,SAAWA,IACpDjG,SAASG,KAAKmG,MAAMN,GAAQC,EAC5B5B,GAAI,QAAU2B,EAAO,YAAcC,EAAQ,KAE/C,CAiBA,SAASqE,GAAmB/J,GAC1B,IAAIgK,EAAW,CACbC,IAAK,SAASC,GACZ,SAASC,IACPtC,GAAS7H,EAAQkK,UAAWlK,EAAQoK,UACtC,CAEAtK,EAAoBoK,GAAaC,EAEjC5J,GAAiB7D,OAAQwN,EAAWC,EAAa,CAAEhK,SAAS,GAC9D,EACAkK,OAAQ,SAASH,GACf,IAAIC,EAAcrK,EAAoBoK,UAC/BpK,EAAoBoK,GAE3BzJ,GAAoB/D,OAAQwN,EAAWC,EACzC,GAGEnK,EAAQsK,YAAchB,MAAMC,UAAUgB,KACxCvK,EAAQkK,UAAYlK,EAAQsK,WAAW,GACvCtK,EAAQsK,WAAWC,IAAIP,EAAShK,EAAQwK,UAExCR,EAAShK,EAAQwK,QAAQxK,EAAQkK,WAGnCpG,GACEP,GAAsBvD,EAAQwK,QAC5B,oBACAxK,EAAQoK,UAEd,CAEA,SAASK,GAAqBD,GAC5BT,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,kBACXE,WAAY,CAAC,iBAAkB,0BAEjCP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,sBACXE,WAAY,CAAC,qBAAsB,8BAErCP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,gBACXE,WAAY,CAAC,eAAgB,wBAE/BP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,QACXF,UAAW,UAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,WACXF,UAAW,YAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,aACXF,UAAW,cAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,qBACXF,UAAW,sBAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,QACXF,UAAW,CAAC,aAAc,iBAE5BH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,qBACXF,UAAW,qBAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,cACXF,UAAW,eAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,YACXF,UAAW,aAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,eACXF,UAAW,gBAEbH,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,mBACXE,WAAY,CACV,kBACA,wBACA,oBACA,mBACA,sBAGJP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,uBACXE,WAAY,CACV,sBACA,4BACA,wBACA,uBACA,0BAGJP,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,iBACXE,WAAY,CACV,gBACA,sBACA,kBACA,iBACA,oBAGA,UAAY/L,GACdwL,GAAmB,CACjBS,OAAQA,EACRJ,UAAW,iBACXF,UAAW,UAGjB,CAEA,SAASQ,GAActF,EAAUuF,EAAiBC,EAAOC,GAWvD,OAVIF,IAAoBvF,IAChBA,KAAYwF,IAChBvL,GACE+F,EAAW,8BAAgCyF,EAAO,sBAEpDzF,EAAWuF,GAEb7G,GAAI+G,EAAO,+BAAiCzF,EAAW,MAGlDA,CACT,CAEA,SAASe,KACP1I,EAAiBiN,GACfjN,EACAD,EACA8D,EACA,SAEJ,CAEA,SAAS8E,KACPlH,EAAgBwL,GACdxL,EACAD,EACAqD,EACA,QAEJ,CAEA,SAASgE,KAgWT,IACMwE,GAhWA,IAASnO,GACX8N,GAAqB,OA+VnBK,EAAqB,EAAIjN,EAG3BnB,OAAOqO,kBACPrO,OAAOsO,uBAEHF,EACFG,KAEAlO,EApGqB,WACzB,SAASmO,EAAqBC,GAC5B,SAASC,EAAqBC,IACxB,IAAUA,EAAQC,WACpBxH,GAAI,uBAAyBuH,EAAQE,KACrCF,EAAQ9K,iBAAiB,OAAQiL,GAAa,GAC9CH,EAAQ9K,iBAAiB,QAASkL,GAAY,GAC9CC,EAASC,KAAKN,GAElB,CAEsB,eAAlBF,EAASN,MAAoD,QAA3BM,EAASS,cAC7CR,EAAqBD,EAAS1M,QACH,cAAlB0M,EAASN,MAClBvB,MAAMC,UAAUC,QAAQC,KACtB0B,EAAS1M,OAAOiL,iBAAiB,OACjC0B,EAGN,CAEA,SAASS,EAAgBR,GACvBK,EAASI,OAAOJ,EAAS/F,QAAQ0F,GAAU,EAC7C,CAEA,SAASU,EAAwBV,GAC/BvH,GAAI,yBAA2BuH,EAAQE,KACvCF,EAAQ5K,oBAAoB,OAAQ+K,GAAa,GACjDH,EAAQ5K,oBAAoB,QAASgL,GAAY,GACjDI,EAAgBR,EAClB,CAEA,SAASW,EAAoBC,EAAOpB,EAAMqB,GACxCH,EAAwBE,EAAMxN,QAC9BoJ,GAASgD,EAAMqB,EAAW,KAAOD,EAAMxN,OAAO8M,IAAK9O,EAAWA,EAChE,CAEA,SAAS+O,EAAYS,GACnBD,EAAoBC,EAAO,YAAa,eAC1C,CAEA,SAASR,EAAWQ,GAClBD,EAAoBC,EAAO,kBAAmB,oBAChD,CAEA,SAASE,EAAiBC,GACxBvE,GACE,mBACA,qBAAuBuE,EAAU,GAAG3N,OAAS,IAAM2N,EAAU,GAAGvB,MAIlEuB,EAAU5C,QAAQ0B,EACpB,CAEA,SAASmB,IACP,IAAI5N,EAASgB,SAAS6M,cAAc,QAClCC,EAAS,CACPC,YAAY,EACZC,mBAAmB,EACnBC,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,SAAS,GAQb,OALAC,EAAW,IAAI/B,EAAiBoB,GAEhCrI,GAAI,gCACJgJ,EAASC,QAAQtO,EAAQ8N,GAElBO,CACT,CAEA,IAAIpB,EAAW,GACbX,EACErO,OAAOqO,kBAAoBrO,OAAOsO,uBACpC8B,EAAWT,IAEb,MAAO,CACLW,WAAY,WACN,eAAgBF,IAClBhJ,GAAI,oCACJgJ,EAASE,aACTtB,EAASlC,QAAQuC,GAErB,EAEJ,CAYqBkB,IAGjBnJ,GAAI,mDACJmH,OAzWAnH,GAAI,uBAER,CAmBA,SAASyC,KACPkE,GAAqB,UAPjB,OAAS1N,GAEXA,EAAaiQ,aAOfE,cAAcpP,EAChB,CA+NA,SAASmN,KACH,IAAMpN,IACRiG,GAAI,gBAAkBjG,EAAW,MACjCC,EAAgBqP,aAAY,WAC1BtF,GAAS,WAAY,gBAAkBhK,EACzC,GAAGgE,KAAKuL,IAAIvP,IAEhB,CAgHA,SAAS2D,GAAiB6L,EAAMlK,GAqB9B,IAAImK,EAAS,EAcb,OAbAnK,EAAKA,GAAM1D,SAASG,KAOlB0N,EAJA,gBAAiB7N,UACjB,qBAAsBA,SAAS8N,YAGtB,QADTD,EAAS7N,SAAS8N,YAAY/L,iBAAiB2B,EAAI,OACxBmK,EAAOD,GAAQ,EA3B5C,SAAgC3H,GAG9B,GAFY,cAEF8H,KAAK9H,GACb,OAAO6C,SAAS7C,EAx0Bb,IA20BL,IAAIK,EAAQ5C,EAAG4C,MAAMyC,KACnBiF,EAAetK,EAAGsK,aAAajF,KAQjC,OANArF,EAAGsK,aAAajF,KAAOrF,EAAGuK,aAAalF,KACvCrF,EAAG4C,MAAMyC,KAAO9C,GAAS,EACzBA,EAAQvC,EAAG4C,MAAM4H,UACjBxK,EAAG4C,MAAMyC,KAAOzC,EAChB5C,EAAGsK,aAAajF,KAAOiF,EAEhB/H,CACT,CAaWkI,CAAuBzK,EAAGuK,aAAaL,IAG3C9E,SAAS+E,EAr2BT,GAs2BT,CAUA,SAASpL,GAAc2L,EAAMnC,GAO3B,IANA,IAAIoC,EAAiBpC,EAASqC,OAC5BC,EAAQ,EACRC,EAAS,EACTC,EAAO3K,GAAsBsK,GAC7BM,EAAQjN,IAEDkN,EAAI,EAAGA,EAAIN,EAAgBM,KAClCJ,EACEtC,EAAS0C,GAAG/F,wBAAwBwF,GACpCrM,GAAiB,SAAW0M,EAAMxC,EAAS0C,KACjCH,IACVA,EAASD,GAWb,OAPAG,EAAQjN,IAAWiN,EAEnBrK,GAAI,UAAYgK,EAAiB,kBACjChK,GAAI,kCAAoCqK,EAAQ,MA3BlD,SAAyBA,GACnBA,EAAQpP,EAAiB,GAE3B+E,GAAI,gCADJ/E,EAAiB,EAAIoP,GACiC,KAE1D,CAwBEE,CAAgBF,GAETF,CACT,CAEA,SAASlM,GAAmBuM,GAC1B,MAAO,CACLA,EAAU/M,aACV+M,EAAUjQ,aACViQ,EAAU1M,wBACV0M,EAAUhQ,wBAEd,CAEA,SAAS+D,GAAkBwL,EAAMU,GAM/B,IAAI7C,EAAWjM,SAASiK,iBAAiB,IAAM6E,EAAM,KAIrD,OAFI,IAAM7C,EAASqC,SANjB1O,GAAK,uBAAyBkP,EAAM,mBAC7B9O,SAASiK,iBAAiB,WAO5BxH,GAAc2L,EAAMnC,EAC7B,CAEA,SAASvJ,KACP,OAAO1C,SAASiK,iBAAiB,SACnC,CAmGA,SAAS/G,GACP6L,EACAC,EACA9G,EACAC,GAiDA,IAAI8G,EAAeC,GAxCnB,WACE,SAASC,EAAeC,EAAGC,GAEzB,QADajN,KAAKuL,IAAIyB,EAAIC,IAAMlQ,EAElC,CAOA,OALA8P,EACEjS,IAAckL,EAAeA,EAAerG,EAAU7D,KACxDkR,EACElS,IAAcmL,EAAcA,EAActF,EAASpD,KAGnD0P,EAAerR,EAAQmR,IACtBzR,GAAkB2R,EAAe5P,EAAO2P,EAE7C,CA2BII,IAA0B,SAAWP,IAxB9BA,IAAgB,CAAExK,KAAM,EAAGnG,SAAU,EAAG6J,KAAM,MAKrDjK,KAAkBS,GACjBjB,GAAkBiC,KAAiBhB,GAUpC+I,GAAYwH,GACDD,IAAgB,CAAE3Q,SAAU,IANzCiG,GAAI,+BAcJkL,KA9CAvI,GAHAlJ,EAASmR,EACT1P,EAAQ2P,EAEeH,GAmD3B,CAIA,SAAS3G,GAAS2G,EAAcC,EAAkB9G,EAAcC,GAQrD/I,GAAiB2P,KAAgBtR,EAgBxC4G,GAAI,4BAA8B0K,IAtB5BA,IAAgB,CAAExH,MAAO,EAAGiI,UAAW,EAAGjL,KAAM,IACpDF,GAAI,kBAAoB2K,GAUL,SAAjBD,EACF7L,GAAW6L,EAAcC,EAAkB9G,EAAcC,GAEzDlF,EACE8L,EACAC,EACA9G,EACAC,GAMR,CAEA,SAASoH,KACFnQ,IACHA,GAAgB,EAChBiF,GAAI,0BAENf,aAAajE,GACbA,EAAqBkE,YAAW,WAC9BnE,GAAgB,EAChBiF,GAAI,0BACJA,GAAI,KACN,GAAGzG,EACL,CAEA,SAAS6R,GAAaV,GACpBjR,EAAS+D,EAAU7D,KACnBuB,EAAQsD,EAASpD,KAEjBuH,GAAQlJ,EAAQyB,EAAOwP,EACzB,CAEA,SAASvH,GAAYwH,GACnB,IAAIU,EAAM1R,EACVA,EAAiBD,EAEjBsG,GAAI,wBAA0B2K,GAC9BO,KACAE,GAAa,SAEbzR,EAAiB0R,CACnB,CAEA,SAAS1I,GAAQlJ,EAAQyB,EAAOwP,EAAc3K,EAAKmB,GASjD,IAEIoK,GAYA,IAAS5Q,IArBP/B,IAAcuI,EAChBA,EAAerG,EAEfmF,GAAI,yBAA2BkB,GAcjClB,GAAI,kCARFsL,EACEnR,EACA,IAHOV,EAAS,IAAMyB,EAKtB,IACAwP,GACC/R,IAAcoH,EAAM,IAAMA,EAAM,KAEY,KACjDpF,EAAO4Q,YAAYrR,EAAQoR,EAASpK,GAOxC,CAEA,SAAS/B,GAASgJ,GAChB,IAAIqD,EAA2B,CAC7BtL,KAAM,WACJrG,EAAUsO,EAAM7H,KAChB3F,EAASwN,EAAMsD,OAEfvL,KACA1G,GAAW,EACX0F,YAAW,WACTtF,GAAW,CACb,GAAGL,EACL,EAEA2J,MAAO,WACAtJ,EAIHoG,GAAI,+BAHJA,GAAI,gCACJoL,GAAa,aAIjB,EAEA/R,OAAQ,WACN0K,GAAS,eAAgB,qCAC3B,EAEAhB,aAAc,WACZjJ,EAAYmJ,WAAWyI,IACzB,EACAC,WAAY,WACV5M,KAAKgE,cACP,EAEA6I,SAAU,WACR,IAAIC,EAAUH,IACd1L,GAAI,0CAA4C6L,GAChDpQ,EAAiBuF,KAAK8K,MAAMD,IAC5B7L,GAAI,MACN,EAEAsL,QAAS,WACP,IAAIO,EAAUH,IAEd1L,GAAI,uCAAyC6L,GAC7CvQ,EAAgB0F,KAAK8K,MAAMD,IAC3B7L,GAAI,MACN,GAOF,SAAS+L,IACP,OAAO5D,EAAM7H,KAAKE,MAAM,KAAK,GAAGA,MAAM,KAAK,EAC7C,CAEA,SAASkL,IACP,OAAOvD,EAAM7H,KAAKC,OAAO4H,EAAM7H,KAAKuB,QAAQ,KAAO,EACrD,CAUA,SAASmK,IAGP,OAAO7D,EAAM7H,KAAKE,MAAM,KAAK,IAAM,CAAEyL,KAAM,EAAGC,MAAO,EACvD,CAEA,SAASC,IACP,IAAIC,EAAcL,IAEdK,KAAeZ,EACjBA,EAAyBY,MAhBWC,EAAO7T,SACzC,iBAAkBI,QACnB,WAAYA,QAAU,iBAAkBA,OAAO0T,OAAO7G,WAe1BuG,KAC7BzQ,GAAK,uBAAyB4M,EAAM7H,KAAO,IAE/C,CAjCSpG,KAAW,GAAKiO,EAAM7H,MAAMC,OAAO,EA5rCjCrG,OAguCL,IAAUV,EACZ2S,IACSH,IACTR,EAAyBtL,OAEzBF,GACE,4BACE+L,IACA,sCAQV,CAIA,SAAS3M,KACH,YAAczD,SAAS4Q,YACzB3T,OAAOgC,OAAO2Q,YAAY,4BAA6B,IAE3D,CAOD,CAzxCD,E,sBCXA,WAUA,SAAU5S,GACR,aAEA,GAAsB,oBAAXC,OAAX,CAEA,IAwwCkC4T,EAxwC9BC,EAAQ,EACVC,GAAa,EACbC,GAAqB,EAGrBC,EAAQ,gBAERpI,EAAe,KACfqI,EAAwBjU,OAAOiU,sBAC/BzS,EAAuB,CACrBC,IAAK,EACLqE,OAAQ,EACRnE,WAAY,EACZC,sBAAuB,GAEzBsS,EAAW,CAAC,EACZzC,EAAQ,KAER0C,EAAW,CACTlU,YAAY,EACZC,eAAgB,KAChBC,WAAY,KACZiU,aAAc,EACd9T,YAAa,KACb+T,aAAa,EACbnT,aAAa,EACboT,qBAAqB,EACrB/L,wBAAyB,aACzBgM,GAAI,gBACJpT,SAAU,GACViG,KAAK,EACLoN,UAAWC,IACXC,SAAUD,IACVE,UAAW,EACXC,SAAU,EACV/S,WAAY,SACZgT,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,eAAgB,IAChB9S,UAAW,EACXsG,uBAAwB,SACxByM,eAAgB,WAAY,EAC5BC,aAAc,WAAY,EAC1BxS,gBAAiB,WACfC,EAAK,uCACP,EACAwS,gBAAiB,WAAY,EAC7BC,eAAgB,WACd,OAAO,CACT,GAgiCAC,EAAa,CAAC,EAsMdrV,OAAO0T,UAhBuBE,EAiBP5T,OAAO0T,QAhBzB4B,GAEK1B,EAAE0B,GAAGC,eACf3B,EAAE0B,GAAGC,aAAe,SAAwBjS,GAK1C,OAAO6C,KAAKqP,OAAO,UAChBC,MALH,SAAcC,EAAO/G,GACnBgH,EAAYhH,EAASrL,EACvB,IAIGsS,KACL,GAVAC,EAAK,GAAI,sDAmBX,EAAO,IAAW,qBAAP,EAAF,GAAS,mCAKpB7V,OAAOuV,aAAevV,OAAOuV,cAAgBO,GApyCJ,CAuDzC,SAASC,IACP,OAAO/V,OAAOqO,kBAAoBrO,OAAOsO,wBAA0BtO,OAAOgW,mBAC5E,CAEA,SAASnS,EAAiBoS,EAAKvP,EAAKzC,GAE9B,qBAAsBjE,OACxBiW,EAAIpS,iBAAiB6C,EAAKzC,GAAM,GACvB,gBAAiBjE,QAE1BiW,EAAItP,YAAY,KAAOD,EAAKzC,EAEhC,CAEA,SAASF,EAAoB0C,EAAIC,EAAKzC,GAEhC,wBAAyBjE,OAC3ByG,EAAG1C,oBAAoB2C,EAAKzC,GAAM,GACzB,gBAAiBjE,QAE1ByG,EAAGG,YAAY,KAAOF,EAAKzC,EAE/B,CA8BA,SAASiS,EAAgBC,GACvB,OAAOnC,EAAQ,IAfjB,SAAiBmC,GACf,IAAIC,EAAS,cAAgBD,EAU7B,OARInW,OAAO+L,MAAQ/L,OAAOqW,OAEtBD,EADEpW,OAAO2J,cAAgB3J,OAAO2J,aAAaK,MACpChK,OAAO2J,aAAaK,QAAU,KAAOmM,EAErC,qBAAuBA,GAI7BC,CACT,CAGuBE,CAAQH,GAAY,GAC3C,CAEA,SAASI,EAAaJ,GACpB,OAAOjC,EAASiC,GAAYjC,EAASiC,GAAU/O,IAAM0M,CACvD,CAEA,SAAS1M,EAAI+O,EAAUhP,GACrBqP,EAAO,MAAOL,EAAUhP,EAAKoP,EAAaJ,GAC5C,CAEA,SAASN,EAAKM,EAAUhP,GACtBqP,EAAO,OAAQL,EAAUhP,EAAKoP,EAAaJ,GAC7C,CAEA,SAASxT,EAAKwT,EAAUhP,GACtBqP,EAAO,OAAQL,EAAUhP,GAAK,EAChC,CAEA,SAASqP,EAAOrI,EAAMgI,EAAUhP,EAAKsP,IAC/B,IAASA,GAAW,iBAAoBzW,OAAOqH,SACjDA,QAAQ8G,GAAM+H,EAAgBC,GAAWhP,EAE7C,CAEA,SAASuP,EAAenH,GACtB,SAASoH,IAOPC,EAAc,UACdA,EAAc,SAEdC,GATA,WACEC,EAAQC,GACRC,EAAgBb,GAChBjM,EAAS,kBAAmB6M,EAC9B,GAKmBA,EAAa,OAClC,CAcA,SAASH,EAAcK,GACrB,IAAIxV,EAAMoG,OAAOqM,EAASiC,GAAU,MAAQc,IAC1CvV,EAAMmG,OAAOqM,EAASiC,GAAU,MAAQc,IACxCC,EAAYD,EAAUE,cACtBnM,EAAOnD,OAAOkP,EAAYG,IAE5B9P,EACE+O,EACA,YAAce,EAAY,gBAAkBxV,EAAM,IAAMD,GAGtDuJ,EAAOtJ,IACTsJ,EAAOtJ,EACP0F,EAAI+O,EAAU,OAASe,EAAY,kBAGjClM,EAAOvJ,IACTuJ,EAAOvJ,EACP2F,EAAI+O,EAAU,OAASe,EAAY,kBAGrCH,EAAYG,GAAa,GAAKlM,CAChC,CAqEA,SAASoM,EAAWrS,GAClB,OAAOoC,EAAIQ,OAAOR,EAAI8B,QAAQ,KArPjBoO,EAqPuCtS,EACtD,CAwCA,SAASuS,EAAqBC,EAAQpB,GAizBxC,IAA6Bb,EAAIkC,EAAMC,EAAVnC,EAhzBzB,WAvBF,IACMoC,EACFC,EAsBAC,EACE,iBACA,aAzBAF,EAAe3U,SAASG,KAAKyI,wBAC/BgM,EAAiBZ,EAAYQ,OAAO5L,wBAE/BvD,KAAKC,UAAU,CACpBwP,aAAcF,EAAe9W,OAC7BiX,YAAaH,EAAerV,MAC5ByV,aAAc5S,KAAK1D,IACjBsB,SAASC,gBAAgB+U,aACzB/X,OAAOgY,aAAe,GAExBC,YAAa9S,KAAK1D,IAChBsB,SAASC,gBAAgBiV,YACzBjY,OAAOkY,YAAc,GAEvBC,UAAWtM,SAAS8L,EAAe5L,IAAM2L,EAAa3L,IAAK,IAC3DqM,WAAYvM,SAAS8L,EAAe7L,KAAO4L,EAAa5L,KAAM,IAC9DN,UAAWxL,OAAOuL,YAClBD,WAAYtL,OAAOqL,eASjBkM,EACApB,EAEJ,EAyyB6BqB,EAxyBS,GAyyBnCnC,EADgCoC,EAxyBOtB,KA0yB1Cd,EAAWoC,GAAWnR,YAAW,WAC/B+O,EAAWoC,GAAW,KACtBnC,GACF,GAAGkC,GA5yBL,CAoDA,SAAS/L,EAAmB1J,GAC1B,IAAI4V,EAAiB5V,EAAO4J,wBAI5B,OAFAP,EAAgB+K,GAET,CACL1L,EAAGtF,KAAKkT,MAAMxQ,OAAO8P,EAAe7L,MAAQjE,OAAO+D,EAAanB,IAChEC,EAAGvF,KAAKkT,MAAMxQ,OAAO8P,EAAe5L,KAAOlE,OAAO+D,EAAalB,IAEnE,CAEA,SAAS4N,EAAuBC,GA6B9B,IAAIxT,EAASwT,EACP9M,EAAmBsL,EAAYQ,QAC/B,CAAE9M,EAAG,EAAGC,EAAG,GACf8N,EAvBO,CACL/N,EAAG5C,OAAOkP,EAAYzU,OAASyC,EAAO0F,EACtCC,EAAG7C,OAAOkP,EAAYlW,QAAUkE,EAAO2F,GAuB3CtD,EACE+O,EACA,8CACEpR,EAAO0F,EACP,MACA1F,EAAO2F,EACP,KAGA1K,OAAO+L,MAAQ/L,OAAOqW,KA3BpBrW,OAAO2J,aACT3J,OAAO2J,aAAa,YAAc4O,EAAY,SAAW,KACvDC,EAAY/N,EACZ+N,EAAY9N,GAGd/H,EACEwT,EACA,0EArBJvK,EAAe4M,EACfhO,IACApD,EAAI+O,EAAU,MA2ClB,CAEA,SAAS3L,KACH,IAAUN,EAAS,iBAAkB0B,GACvCoL,EAAgBb,GAEhBsC,GAEJ,CAoDA,SAASvO,EAASwO,EAAUC,GAC1B,OAAOC,EAAYzC,EAAUuC,EAAUC,EACzC,CA0FA,IA5NME,EAxGAC,EA7FApR,EAiaFP,EAAMoI,EAAM7H,KACdqP,EAAc,CAAC,EACfZ,EAAW,KAET,8BAAgChP,EA5BpC,WACE,IAAK,IAAIgP,KAAYjC,EACnB0D,EACE,wBACAmB,EAAkB5C,GAClBpT,SAASqJ,eAAe+J,GACxBA,EAGN,CAoBE6C,GAjVEhF,KAAW,GAAK7M,GAAKQ,OAAO,EAjOrBqM,KAkOP7M,EAAIQ,OAlOGqM,IAkOcpM,MAAM,KAAK,KAAMsM,GAtFpCxM,EAAOP,EAAIQ,OA5INqM,IA4IuBpM,MAAM,KAwatCmP,EAtaO,CACLQ,OAAQrD,EAASxM,EAAK,KAAOwM,EAASxM,EAAK,IAAI6P,OAC/ChD,GAAI7M,EAAK,GACT7G,OAAQ6G,EAAK,GACbpF,MAAOoF,EAAK,GACZyG,KAAMzG,EAAK,IAkabyO,EAAmBY,EAAYxC,GAC3BL,EAASiC,KACXjC,EAASiC,GAAU8C,QAAS,IA9U1BH,EAAU/B,EAAY5I,OAAQ,CAAEkF,KAAM,EAAGC,MAAO,EAAGvT,UAAW,KAGhEqH,EAAI+O,EAAU,gDAGT2C,GAqRT,SAAqB3C,GACnB,IAAI0C,GAAU,EAad,OAXK3E,EAASiC,KACZ0C,GAAU,EACVlW,EACEoU,EAAY5I,KACV,oBACAgI,EACA,kBACAhP,IAIC0R,CACT,CAuCoCK,CAAY/C,KAC5C/O,EAAI+O,EAAU,aAAehP,GA1O3B0R,GAAU,EAEV,OAAS9B,EAAYQ,SACvB5U,EAAKwT,EAAU,WAAaY,EAAYxC,GAAK,eAC7CsE,GAAU,GAELA,GAxKT,WA8BE,IARQM,EAQJC,EAAS7J,EAAM6J,OACjB/E,EAAcH,EAASiC,IAAajC,EAASiC,GAAU9B,YAEzD,GAAIA,GAAe,GAAK+E,GAAW,UAN1B/E,EAAYzL,cAAgBgE,MAzBnC,WACE,IAAI8E,EAAI,EACNoH,GAAU,EAQZ,IANA1R,EACE+O,EACA,wDACE9B,GAGG3C,EAAI2C,EAAYhD,OAAQK,IAC7B,GAAI2C,EAAY3C,KAAO0H,EAAQ,CAC7BN,GAAU,EACV,KACF,CAEF,OAAOA,CACT,CAQ2CO,IALrCF,EAAajF,EAASiC,IAAajC,EAASiC,GAAUgD,WAC1D/R,EAAI+O,EAAU,gCAAkCgD,GACzCC,IAAWD,IAUpB,MAAM,IAAIG,MACR,qCACEF,EACA,QACArC,EAAYQ,OAAOhD,GACnB,kBACAhF,EAAM7H,KACN,sHAIN,OAAO,CACT,CAgW+B6R,IAxG/B,WAGE,OAFIrF,EAASiC,IAAajC,EAASiC,GAAUvV,UA2EzCsT,EAASiC,KACXjC,EAASiC,GAAUvV,UAAW,GA1ExBmW,EAAY5I,MAClB,IAAK,QACC+F,EAASiC,GAAUqD,qBACrBZ,EACEzC,EACA,uBACAjC,EAASiC,GAAUoB,QAElBkC,EAAY1C,EAAYQ,QAC7B,MACF,IAAK,UA5OqBtE,EA6OHmE,EAAW,GA5OpChQ,EACE+O,EACA,oCACEY,EAAYQ,OAAOhD,GACnB,cACAtB,EACA,KAEJ/I,EAAS,kBAAmB,CAC1BqN,OAAQR,EAAYQ,OACpB7E,QAAStK,KAAK8K,MAAMD,KAEtB7L,EAAI+O,EAAU,MAiOV,MACF,IAAK,WACHmC,GAAuB,GACvB,MACF,IAAK,iBACHA,GAAuB,GACvB,MACF,IAAK,WACHhB,EACEpD,EAASiC,IAAajC,EAASiC,GAAUoB,OACzCpB,GAtMR,WACE,SAASuD,EAAYvL,EAAMlK,GACzB,SAAS0V,IACHzF,EAASK,GACX+C,EAAqBpD,EAASK,GAAIgD,OAAQhD,GAE1CqF,GAEJ,CAEA,CAAC,SAAU,UAAU9M,SAAQ,SAASpG,GACpCU,EAAImN,EAAIpG,EAAOzH,EAAM,8BACrBzC,EAAKjE,OAAQ0G,EAAKiT,EACpB,GACF,CAEA,SAASC,IACPF,EAAY,UAAW3V,EACzB,CAMA,IAAIwQ,EAAK4B,EAHPuD,EAAY,OAAQ7V,GAOlBqQ,EAASK,KACXL,EAASK,GAAIsF,aAAeD,EAEhC,CAyKME,GACA,MACF,IAAK,eAxKH5F,EAASiC,IAAajC,EAASiC,GAAU0D,eAC3C3F,EAASiC,GAAU0D,sBACZ3F,EAASiC,GAAU0D,cAwKxB,MACF,IAAK,cAtFT,SAAoB7R,GAmClB,IAjCMiE,EAiCF7B,EAAOpC,EAASJ,MAAM,KAAK,IAAM,GACnCsE,EAAWC,mBAAmB/B,GAC9BrI,EACEgB,SAASqJ,eAAeF,IACxBnJ,SAASsJ,kBAAkBH,GAAU,GAErCnK,GAvCEkK,EAAeR,EAAmB1J,GAEtCqF,EACE+O,EACA,4BACE/L,EACA,WACA6B,EAAaxB,EACb,OACAwB,EAAavB,GAEjBkB,EAAe,CACbnB,EAAGwB,EAAaxB,EAChBC,EAAGuB,EAAavB,GAGlBF,IACApD,EAAI+O,EAAU,OAwBLnW,OAAO+L,MAAQ/L,OAAOqW,KApB3BrW,OAAO2J,aACT3J,OAAO2J,aAAaQ,aAAaC,GAEjChD,EACE+O,EACA,iBACE/L,EACA,gDAgBNhD,EAAI+O,EAAU,iBAAmB/L,EAAO,aAE5C,CAuCMC,CAAW+M,EAAW,IACtB,MACF,IAAK,QACH7M,EAAYwM,GACZ,MACF,IAAK,OACHJ,IACAzM,EAAS,eAAgB6M,EAAYQ,QACrC,MACF,QACEZ,IA1QN,IAA8B1D,CA4Q9B,CA4DM8G,KAIJlE,EAAKM,EAAU,YAAchP,EAEjC,CAEA,SAASyR,EAAYzC,EAAUuC,EAAUC,GACvC,IAAI1U,EAAO,KACT2M,EAAS,KAEX,GAAIsD,EAASiC,GAAW,CAGtB,GAAI,mBAFJlS,EAAOiQ,EAASiC,GAAUuC,IAKxB,MAAM,IAAIsB,UACRtB,EAAW,cAAgBvC,EAAW,uBAHxCvF,EAAS3M,EAAK0U,EAMlB,CAEA,OAAO/H,CACT,CAEA,SAASqJ,EAAsB1C,GAC7B,IAAIpB,EAAWoB,EAAOhD,UACfL,EAASiC,EAClB,CAEA,SAASsD,EAAYlC,GACnB,IAAIpB,EAAWoB,EAAOhD,GACtBnN,EAAI+O,EAAU,oBAAsBA,GAEpC,IAEMoB,EAAO2C,YACT3C,EAAO2C,WAAWC,YAAY5C,EAElC,CAAE,MAAOvT,GAAI,CAEb4U,EAAYzC,EAAU,iBAAkBA,GACxC/O,EAAI+O,EAAU,MACd8D,EAAsB1C,EACxB,CAEA,SAASnM,EAAgB+K,GACnB,OAASvK,GAWXxE,EACE+O,EACA,uBAZFvK,EAAe,CACbnB,EACEzK,OAAOqL,cAAgBtL,EACnBC,OAAOqL,YACPtI,SAASC,gBAAgBsI,WAC/BZ,EACE1K,OAAOuL,cAAgBxL,EACnBC,OAAOuL,YACPxI,SAASC,gBAAgBwI,YAIMf,EAAI,IAAMmB,EAAalB,EAGlE,CAEA,SAASsM,EAAgBb,GACnB,OAASvK,IACX5L,OAAOwK,SAASoB,EAAanB,EAAGmB,EAAalB,GAC7CtD,EACE+O,EACA,sBAAwBvK,EAAanB,EAAI,IAAMmB,EAAalB,GAE9D+N,IAEJ,CAEA,SAASA,IACP7M,EAAe,IACjB,CAEA,SAASrB,EAAYwM,GAMnB3P,EACE2P,EAAYxC,GACZ,4BACG,SAAWwC,EAAY5I,KAAO,YAAc,WAEjD/C,EAAgB2L,EAAYxC,IAC5BsC,GAXA,WACEC,EAAQC,GACRa,EAAQ,QAAS,QAASb,EAAYQ,OAAQR,EAAYxC,GAC5D,GAQkBwC,EAAa,QACjC,CAEA,SAASD,EAAQC,GAmBf,SAASqD,EAAQlD,GAMVnD,GAAsB,MAAQgD,EAAYG,KAC7CnD,GAAqB,EACrB3M,EAAI+O,EAAU,wDA4ZO,WACzB,SAASkE,IACP,SAASC,EAAYC,GACnB,SAASC,EAAatD,GACpB,MACE,SACChD,EAASqG,IAAcrG,EAASqG,GAAWhD,OAAOlO,MAAM6N,GAE7D,CAEA,SAASuD,EAAUhU,GACjB,OAAO,OAASA,EAAGiU,YACrB,CAGExG,EAASqG,IACTE,EAAUvG,EAASqG,GAAWhD,UAC7BiD,EAAa,WAAaA,EAAa,WAExC5C,EACE,oBACA,SACA1D,EAASqG,GAAWhD,OACpBgD,EAGN,CAEA,IAAK,IAAIA,KAAarG,EACpBoG,EAAYC,EAEhB,CAEA,SAAS9K,EAAiBC,GACxBtI,EACE,SACA,sBAAwBsI,EAAU,GAAG3N,OAAS,IAAM2N,EAAU,GAAGvB,MAEnEwM,EAAQN,EAAc,GACxB,CAEA,SAAS1K,IACP,IAAI5N,EAASgB,SAAS6M,cAAc,QAClCC,EAAS,CACPC,YAAY,EACZC,mBAAmB,EACnBC,eAAe,EACfC,uBAAuB,EACvBC,WAAW,EACXC,SAAS,GAEA,IAAI9B,EAAiBoB,GAEzBY,QAAQtO,EAAQ8N,EAC3B,CAEA,IAAIxB,EAAmB0H,IACnB1H,GACFsB,GAEJ,CAvdMiL,GAEJ,CAEA,SAASC,EAAiB3D,IA/B1B,SAAsBA,GACfH,EAAYxC,IAIjBwC,EAAYQ,OAAOlO,MAAM6N,GAAaH,EAAYG,GAAa,KAC/D9P,EACE2P,EAAYxC,GACZ,WACE4B,EACA,KACAe,EACA,WACAH,EAAYG,GACZ,OAZF9P,EAAI,YAAa,yBAcrB,CAgBE0T,CAAa5D,GACbkD,EAAQlD,EACV,CAEA,IAAIf,EAAWY,EAAYQ,OAAOhD,GAE9BL,EAASiC,KACPjC,EAASiC,GAAUrB,YACrB+F,EAAiB,UAEf3G,EAASiC,GAAUpB,WACrB8F,EAAiB,SAGvB,CAEA,SAAShE,EAAW5S,EAAM8S,EAAagE,GAEjCA,IAAchE,EAAY5I,MAAQ8F,GACpC7M,EAAI2P,EAAYxC,GAAI,8BACpBN,EAAsBhQ,IAEtBA,GAEJ,CAEA,SAAS2T,EAAQoD,EAAW7T,EAAKoQ,EAAQhD,EAAI0G,GA2D3C,IAzDMlZ,EAyDFmZ,GAAa,EAEjB3G,EAAKA,GAAMgD,EAAOhD,GAEdL,EAASK,KAxCTgD,GACA,kBAAmBA,GACnB,OAASA,EAAO4D,eAvBdpZ,EAASmS,EAASK,IAAOL,EAASK,GAAIjM,aAC1ClB,EACEmN,EACA,IACEyG,EACA,2BACAzG,EACA,MACApN,EACA,mBACApF,GAEJwV,EAAO4D,cAAcxI,YAAYqB,EAAQ7M,EAAKpF,IAI9CY,EAAK4R,EAAI,IAAMyG,EAAY,YAAczG,EAAK,eA8B1C0G,GACF/G,EAASK,IACPL,EAASK,GAAIS,iBAEfd,EAASK,GAAI6G,WAAa9U,YAjB5B,YACM4N,EAASK,IAAQL,EAASK,GAAI0E,QAAWiC,IAC3CA,GAAa,EACbvY,EACE4R,EACA,mCACEL,EAASK,GAAIS,eAAiB,IAC9B,gOAGR,GASId,EAASK,GAAIS,iBAarB,CAEA,SAAS+D,EAAkB5C,GACzB,OACEA,EACA,IACAjC,EAASiC,GAAU/B,aACnB,IACAF,EAASiC,GAAUpB,UACnB,IACAb,EAASiC,GAAU/O,IACnB,IACA8M,EAASiC,GAAUhV,SACnB,IACA+S,EAASiC,GAAU7B,oBACnB,IACAJ,EAASiC,GAAUlW,WACnB,IACAiU,EAASiC,GAAUhW,WACnB,IACA+T,EAASiC,GAAU5N,wBACnB,IACA2L,EAASiC,GAAUjW,eACnB,IACAgU,EAASiC,GAAU7V,YACnB,IACA4T,EAASiC,GAAUjU,UACnB,IACAgS,EAASiC,GAAUjV,YACnB,IACAgT,EAASiC,GAAUtU,WACnB,IACAqS,EAASiC,GAAU3N,sBAEvB,CAEA,SAASmN,EAAY4B,EAAQjU,GAoP3B,IAjFc6D,EA0BRkH,EAuDF8H,EAtMJ,SAAqBA,GARrB,IACM5B,EAmBJ,MAVI,KAAO4B,IACToB,EAAOhD,IAVLA,EAAMjR,GAAWA,EAAQiR,IAAOJ,EAASI,GAAKV,IAC9C,OAAS9Q,SAASqJ,eAAemI,KACnCA,GAAUV,KAQEsC,EANP5B,GAOLT,GAAcxQ,GAAW,CAAC,GAAG8D,IAE7BA,EACE+O,EACA,4BAA8BA,EAAW,KAAOoB,EAAO1I,IAAM,MAI1DsH,CACT,CAyLekF,CAAY9D,EAAOhD,IAHzB4B,KAAYjC,GAAY,kBAAmBqD,EAalD5U,EAAKwT,EAAU,oCApCjB,SAAwB7S,GAJxB,IAAyB6V,EAKvB7V,EAAUA,GAAW,CAAC,EACtB4Q,EAASiC,GAAY,CACnBvV,UAAU,EACV2W,OAAQA,EACR4B,WAAY5B,EAAO1I,IAChBjH,MAAM,KACNX,MAAM,EAAG,GACTqU,KAAK,MA5BZ,SAAsBhY,GACpB,GAAI,iBAAoBA,EACtB,MAAM,IAAI0W,UAAU,2BAExB,CA2BEuB,CAAajY,GAzBf,SAAqBA,GACnB,IAAK,IAAIkY,KAAUrH,EACbA,EAASsH,eAAeD,KAC1BtH,EAASiC,GAAUqF,GAAUlY,EAAQmY,eAAeD,GAChDlY,EAAQkY,GACRrH,EAASqH,GAGnB,CAkBEE,CAAYpY,GAER4Q,EAASiC,KACXjC,EAASiC,GAAU7N,cACjB,IAAS4L,EAASiC,GAAU9B,YAnBzB,MADgB8E,EAqBCjF,EAASiC,GAAUgD,aApBf,YAAcA,EAAa,IAAMA,EAqBrD,IAEV,CASEwC,CAAerY,GA1LjB,WAcE,OAbA8D,EACE+O,EACA,qBACGjC,EAASiC,IAAajC,EAASiC,GAAUtB,UACtC,UACA,YACJ,QACAsB,GAEJoB,EAAOlO,MAAMuS,UACX,KAAW1H,EAASiC,IAAajC,EAASiC,GAAUtB,WAChD,SACA,OACEX,EAASiC,IAAajC,EAASiC,GAAUtB,WAC/C,IAAK,OACH,MACF,KAAK,EACH0C,EAAO1C,UAAY,MACnB,MACF,KAAK,EACH0C,EAAO1C,UAAY,KACnB,MACF,QACE0C,EAAO1C,UAAYX,EAASiC,GACxBjC,EAASiC,GAAUtB,UACnB,KAEV,CA+JEgH,GAvPF,WACE,SAASC,EAASzS,GAEdoL,MAAaP,EAASiC,GAAU9M,IAChC,IAAM6K,EAASiC,GAAU9M,KAEzBkO,EAAOlO,MAAMA,GAAS6K,EAASiC,GAAU9M,GAAS,KAClDjC,EACE+O,EACA,OAAS9M,EAAQ,MAAQ6K,EAASiC,GAAU9M,GAAS,MAG3D,CAEA,SAAS0S,EAAU7E,GACjB,GACEhD,EAASiC,GAAU,MAAQe,GAC3BhD,EAASiC,GAAU,MAAQe,GAE3B,MAAM,IAAIoC,MACR,gBACEpC,EACA,+BACAA,EAGR,CAEA6E,EAAU,UACVA,EAAU,SAEVD,EAAS,aACTA,EAAS,aACTA,EAAS,YACTA,EAAS,WACX,CAqNEE,GAzJE,iBACU9H,EAASiC,IAAajC,EAASiC,GAAUhW,aACnD,OAAS+T,EAASiC,IAAajC,EAASiC,GAAUhW,cAElD+T,EAASiC,GAAU/B,aAAeF,EAASiC,GAAUhW,WACrD+T,EAASiC,GAAUhW,WACZ+T,EAASiC,GAAUhW,WAAa,MA6D7BgH,EAwFP4R,EAAkB5C,IA9DnB9H,EAAmB0H,MApBvB,SAA+B1H,GACxBkJ,EAAO2C,YAIU,IAAI7L,GAAiB,SAAUqB,GACnDA,EAAU5C,SAAQ,SAAU2B,GACP7B,MAAMC,UAAU5F,MAAM8F,KAAK0B,EAASwN,cAC1CnP,SAAQ,SAAUoP,GACzBA,IAAgB3E,GAClBkC,EAAYlC,EAEhB,GACF,GACF,IACgBlH,QAAQkH,EAAO2C,WAAY,CACzChK,WAAW,GAEf,CAIEiM,CAAsB9N,GAGxBxK,EAAiB0T,EAAQ,QA9BzB,WA1DF,IAIM3W,EACFwb,EAsDAxE,EAAQ,gBAAiBzQ,EAAKoQ,EAAQxX,GAAW,GAvD/Ca,EAAWsT,EAASiC,IAAajC,EAASiC,GAAUvV,SACtDwb,EACElI,EAASiC,IACTjC,EAASiC,GAAU5N,2BAA2B/G,GAE7CZ,GAAYwb,GACf7R,EAAY,CAAEgN,OAAQA,EAAQ1W,OAAQ,EAAGyB,MAAO,EAAG6L,KAAM,QAmD3D,IA4BAyJ,EAAQ,OAAQzQ,EAAKoQ,EAAQxX,GAAW,GA1EpCsc,SAASxP,UAAUyP,MAAQpI,EAASiC,KAEtCjC,EAASiC,GAAUoB,OAAOpP,cAAgB,CACxC2B,MAAO2P,EAAY6C,KAAK,KAAMpI,EAASiC,GAAUoB,QAEjDgF,gBAAiBtC,EAAsBqC,KACrC,KACApI,EAASiC,GAAUoB,QAGrB9W,OAAQmX,EAAQ0E,KACd,KACA,gBACA,SACApI,EAASiC,GAAUoB,QAGrBpN,aAAc,SAASqS,GACrB5E,EACE,iBACA,gBAAkB4E,EAClBtI,EAASiC,GAAUoB,OACnBpB,EAEJ,EAEAvL,YAAa,SAAS8H,GAEpBkF,EACE,eACA,YAHFlF,EAAUtK,KAAKC,UAAUqK,IAIvBwB,EAASiC,GAAUoB,OACnBpB,EAEJ,IAqGR,CAEA,SAASwE,EAAQrF,EAAIkC,GACf,OAAS/F,IACXA,EAAQnL,YAAW,WACjBmL,EAAQ,KACR6D,GACF,GAAGkC,GAEP,CA0EA,SAASiF,EAAclN,GAKrBnI,EAAI,SAAU,kBAAoBmI,GAClCoL,GALA,WACE+B,EAAe,UAAYnN,EAAO,SACpC,GAGgB,GAClB,CAE2B,SAASoN,IAK9B,WAAa5Z,SAAS6Z,kBACxBxV,EAAI,WAAY,mCAChBuT,GANF,WACE+B,EAAe,cAAe,SAChC,GAIkB,IAEpB,CAEA,SAASA,EAAelP,EAAW+B,GACjC,SAASsN,EAAsB1G,GAC7B,OACEjC,EAASiC,IACT,WAAajC,EAASiC,GAAUtU,YAChCqS,EAASiC,GAAUlW,aAClBiU,EAASiC,GAAUvV,QAExB,CAEA,IAAK,IAAIuV,KAAYjC,EACf2I,EAAsB1G,IACxByB,EAAQpK,EAAW+B,EAAOxM,SAASqJ,eAAe+J,GAAWA,EAGnE,CAmBA,SAASL,IACP,SAASxO,EAAKhE,EAASqL,GAWjBA,KAVJ,WACE,IAAKA,EAAQmO,QACX,MAAM,IAAI9C,UAAU,qCACf,GAAI,WAAarL,EAAQmO,QAAQ9V,cACtC,MAAM,IAAIgT,UACR,iCAAmCrL,EAAQmO,QAAU,IAG3D,CAGEC,GACApH,EAAYhH,EAASrL,GACrB0Z,EAAQ/N,KAAKN,GAEjB,CAUA,IAAIqO,EAKJ,OAnqCF,WACE,IACEvS,EADEwS,EAAU,CAAC,MAAO,SAAU,IAAK,MAIrC,IAAKxS,EAAI,EAAGA,EAAIwS,EAAQ5L,SAAW4C,EAAuBxJ,GAAK,EAC7DwJ,EAAwBjU,OAAOid,EAAQxS,GAAK,yBAGzCwJ,GACH7M,EAAI,QAAS,sCAEjB,CAopCE8V,GA7CArZ,EAAiB7D,OAAQ,UAAW0W,GAEpC7S,EAAiB7D,OAAQ,UAAU,WACjCyc,EAAc,SAChB,IAEA5Y,EAAiBd,SAAU,mBAAoB4Z,GAC/C9Y,EAAiBd,SAAU,2BAA4B4Z,GACvD9Y,EAAiB7D,OAAQ,WAAW,WAClCyc,EAAc,QAChB,IACA5Y,EAAiB7D,OAAQ,SAAS,WAChCyc,EAAc,QAChB,IAmCO,SAAuBnZ,EAASvB,GAKrC,OAJAib,EAAU,GAdZ,SAA+B1Z,GACzBA,GAAWA,EAAQgR,qBACrB3R,EACE,qGAGN,CAUEwa,CAAsB7Z,UAEPvB,GACb,IAAK,YACL,IAAK,SACH6K,MAAMC,UAAUC,QAAQC,KACtBhK,SAASiK,iBAAiBjL,GAAU,UACpCuF,EAAKgV,KAAKvc,EAAWuD,IAEvB,MACF,IAAK,SACHgE,EAAKhE,EAASvB,GACd,MACF,QACE,MAAM,IAAIiY,UAAU,gCAAkCjY,EAAS,KAGnE,OAAOib,CACT,CACF,CA6BD,CAxyCD,E,qCCRAvJ,EAAO7T,QAAU,EAAjB,M","sources":["webpack://oticon/./node_modules/iframe-resizer/js/index.js","webpack://oticon/./node_modules/iframe-resizer/js/iframeResizer.contentWindow.js","webpack://oticon/./node_modules/iframe-resizer/js/iframeResizer.js","webpack://oticon/./node_modules/iframe-resizer/index.js"],"sourcesContent":["exports.iframeResizer = require('./iframeResizer');\nexports.iframeResizerContentWindow = require('./iframeResizer.contentWindow');\n","/*\n * File: iframeResizer.contentWindow.js\n * Desc: Include this file in any page being loaded into an iframe\n * to force the iframe to resize to the content size.\n * Requires: iframeResizer.js on host page.\n * Doc: https://github.com/davidjbradshaw/iframe-resizer\n * Author: David J. Bradshaw - dave@bradshaw.net\n * Contributor: Jure Mav - jure.mav@gmail.com\n * Contributor: Ian Caunce - ian@hallnet.co.uk\n */\n\n(function(undefined) {\n 'use strict';\n\n if (typeof window === 'undefined') return; // don't run for server side render\n\n var autoResize = true,\n base = 10,\n bodyBackground = '',\n bodyMargin = 0,\n bodyMarginStr = '',\n bodyObserver = null,\n bodyPadding = '',\n calculateWidth = false,\n doubleEventList = { resize: 1, click: 1 },\n eventCancelTimer = 128,\n firstRun = true,\n height = 1,\n heightCalcModeDefault = 'bodyOffset',\n heightCalcMode = heightCalcModeDefault,\n initLock = true,\n initMsg = '',\n inPageLinks = {},\n interval = 32,\n intervalTimer = null,\n logging = false,\n msgID = '[iFrameSizer]', //Must match host page msg ID\n msgIdLen = msgID.length,\n myID = '',\n observer = null,\n resetRequiredMethods = {\n max: 1,\n min: 1,\n bodyScroll: 1,\n documentElementScroll: 1\n },\n resizeFrom = 'child',\n sendPermit = true,\n target = window.parent,\n targetOriginDefault = '*',\n tolerance = 0,\n triggerLocked = false,\n triggerLockedTimer = null,\n throttledTimer = 16,\n width = 1,\n widthCalcModeDefault = 'scroll',\n widthCalcMode = widthCalcModeDefault,\n win = window,\n messageCallback = function() {\n warn('MessageCallback function not defined');\n },\n readyCallback = function() {},\n pageInfoCallback = function() {},\n customCalcMethods = {\n height: function() {\n warn('Custom height calculation function not defined');\n return document.documentElement.offsetHeight;\n },\n width: function() {\n warn('Custom width calculation function not defined');\n return document.body.scrollWidth;\n }\n },\n eventHandlersByName = {},\n passiveSupported = false,\n onceSupported = false;\n\n function noop() {}\n\n try {\n var options = Object.create(\n {},\n {\n passive: {\n get: function() {\n passiveSupported = true;\n }\n },\n once: {\n get: function() {\n onceSupported = true;\n }\n }\n }\n );\n window.addEventListener('test', noop, options);\n window.removeEventListener('test', noop, options);\n } catch (e) {\n /* */\n }\n\n function addEventListener(el, evt, func, options) {\n /* istanbul ignore else */ // Not testable in phantomJS\n if ('addEventListener' in window) {\n el.addEventListener(evt, func, passiveSupported ? options || {} : false);\n } else if ('attachEvent' in window) {\n //IE\n el.attachEvent('on' + evt, func);\n }\n }\n\n function removeEventListener(el, evt, func) {\n /* istanbul ignore else */ // Not testable in phantomJS\n if ('removeEventListener' in window) {\n el.removeEventListener(evt, func, false);\n } else if ('detachEvent' in window) {\n //IE\n el.detachEvent('on' + evt, func);\n }\n }\n\n function capitalizeFirstLetter(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n //Based on underscore.js\n function throttle(func) {\n var context,\n args,\n result,\n timeout = null,\n previous = 0,\n later = function() {\n previous = getNow();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) {\n context = args = null;\n }\n };\n\n return function() {\n var now = getNow();\n\n if (!previous) {\n previous = now;\n }\n\n var remaining = throttledTimer - (now - previous);\n\n context = this;\n args = arguments;\n\n if (remaining <= 0 || remaining > throttledTimer) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n\n previous = now;\n result = func.apply(context, args);\n\n if (!timeout) {\n context = args = null;\n }\n } else if (!timeout) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n }\n\n var getNow =\n Date.now ||\n function() {\n /* istanbul ignore next */ // Not testable in PhantonJS\n return new Date().getTime();\n };\n\n function formatLogMsg(msg) {\n return msgID + '[' + myID + ']' + ' ' + msg;\n }\n\n function log(msg) {\n if (logging && 'object' === typeof window.console) {\n console.log(formatLogMsg(msg));\n }\n }\n\n function warn(msg) {\n if ('object' === typeof window.console) {\n console.warn(formatLogMsg(msg));\n }\n }\n\n function init() {\n readDataFromParent();\n log('Initialising iFrame (' + location.href + ')');\n readDataFromPage();\n setMargin();\n setBodyStyle('background', bodyBackground);\n setBodyStyle('padding', bodyPadding);\n injectClearFixIntoBodyElement();\n checkHeightMode();\n checkWidthMode();\n stopInfiniteResizingOfIFrame();\n setupPublicMethods();\n startEventListeners();\n inPageLinks = setupInPageLinks();\n sendSize('init', 'Init message from host page');\n readyCallback();\n }\n\n function readDataFromParent() {\n function strBool(str) {\n return 'true' === str ? true : false;\n }\n\n var data = initMsg.substr(msgIdLen).split(':');\n\n myID = data[0];\n bodyMargin = undefined !== data[1] ? Number(data[1]) : bodyMargin; //For V1 compatibility\n calculateWidth = undefined !== data[2] ? strBool(data[2]) : calculateWidth;\n logging = undefined !== data[3] ? strBool(data[3]) : logging;\n interval = undefined !== data[4] ? Number(data[4]) : interval;\n autoResize = undefined !== data[6] ? strBool(data[6]) : autoResize;\n bodyMarginStr = data[7];\n heightCalcMode = undefined !== data[8] ? data[8] : heightCalcMode;\n bodyBackground = data[9];\n bodyPadding = data[10];\n tolerance = undefined !== data[11] ? Number(data[11]) : tolerance;\n inPageLinks.enable = undefined !== data[12] ? strBool(data[12]) : false;\n resizeFrom = undefined !== data[13] ? data[13] : resizeFrom;\n widthCalcMode = undefined !== data[14] ? data[14] : widthCalcMode;\n }\n\n function readDataFromPage() {\n function readData() {\n var data = window.iFrameResizer;\n\n log('Reading data from page: ' + JSON.stringify(data));\n\n messageCallback =\n 'messageCallback' in data ? data.messageCallback : messageCallback;\n readyCallback =\n 'readyCallback' in data ? data.readyCallback : readyCallback;\n targetOriginDefault =\n 'targetOrigin' in data ? data.targetOrigin : targetOriginDefault;\n heightCalcMode =\n 'heightCalculationMethod' in data\n ? data.heightCalculationMethod\n : heightCalcMode;\n widthCalcMode =\n 'widthCalculationMethod' in data\n ? data.widthCalculationMethod\n : widthCalcMode;\n }\n\n function setupCustomCalcMethods(calcMode, calcFunc) {\n if ('function' === typeof calcMode) {\n log('Setup custom ' + calcFunc + 'CalcMethod');\n customCalcMethods[calcFunc] = calcMode;\n calcMode = 'custom';\n }\n\n return calcMode;\n }\n\n if (\n 'iFrameResizer' in window &&\n Object === window.iFrameResizer.constructor\n ) {\n readData();\n heightCalcMode = setupCustomCalcMethods(heightCalcMode, 'height');\n widthCalcMode = setupCustomCalcMethods(widthCalcMode, 'width');\n }\n\n log('TargetOrigin for parent set to: ' + targetOriginDefault);\n }\n\n function chkCSS(attr, value) {\n if (-1 !== value.indexOf('-')) {\n warn('Negative CSS value ignored for ' + attr);\n value = '';\n }\n return value;\n }\n\n function setBodyStyle(attr, value) {\n if (undefined !== value && '' !== value && 'null' !== value) {\n document.body.style[attr] = value;\n log('Body ' + attr + ' set to \"' + value + '\"');\n }\n }\n\n function setMargin() {\n //If called via V1 script, convert bodyMargin from int to str\n if (undefined === bodyMarginStr) {\n bodyMarginStr = bodyMargin + 'px';\n }\n\n setBodyStyle('margin', chkCSS('margin', bodyMarginStr));\n }\n\n function stopInfiniteResizingOfIFrame() {\n document.documentElement.style.height = '';\n document.body.style.height = '';\n log('HTML & body height set to \"auto\"');\n }\n\n function manageTriggerEvent(options) {\n var listener = {\n add: function(eventName) {\n function handleEvent() {\n sendSize(options.eventName, options.eventType);\n }\n\n eventHandlersByName[eventName] = handleEvent;\n\n addEventListener(window, eventName, handleEvent, { passive: true });\n },\n remove: function(eventName) {\n var handleEvent = eventHandlersByName[eventName];\n delete eventHandlersByName[eventName];\n\n removeEventListener(window, eventName, handleEvent);\n }\n };\n\n if (options.eventNames && Array.prototype.map) {\n options.eventName = options.eventNames[0];\n options.eventNames.map(listener[options.method]);\n } else {\n listener[options.method](options.eventName);\n }\n\n log(\n capitalizeFirstLetter(options.method) +\n ' event listener: ' +\n options.eventType\n );\n }\n\n function manageEventListeners(method) {\n manageTriggerEvent({\n method: method,\n eventType: 'Animation Start',\n eventNames: ['animationstart', 'webkitAnimationStart']\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Animation Iteration',\n eventNames: ['animationiteration', 'webkitAnimationIteration']\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Animation End',\n eventNames: ['animationend', 'webkitAnimationEnd']\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Input',\n eventName: 'input'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Mouse Up',\n eventName: 'mouseup'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Mouse Down',\n eventName: 'mousedown'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Orientation Change',\n eventName: 'orientationchange'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Print',\n eventName: ['afterprint', 'beforeprint']\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Ready State Change',\n eventName: 'readystatechange'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Touch Start',\n eventName: 'touchstart'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Touch End',\n eventName: 'touchend'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Touch Cancel',\n eventName: 'touchcancel'\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Transition Start',\n eventNames: [\n 'transitionstart',\n 'webkitTransitionStart',\n 'MSTransitionStart',\n 'oTransitionStart',\n 'otransitionstart'\n ]\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Transition Iteration',\n eventNames: [\n 'transitioniteration',\n 'webkitTransitionIteration',\n 'MSTransitionIteration',\n 'oTransitionIteration',\n 'otransitioniteration'\n ]\n });\n manageTriggerEvent({\n method: method,\n eventType: 'Transition End',\n eventNames: [\n 'transitionend',\n 'webkitTransitionEnd',\n 'MSTransitionEnd',\n 'oTransitionEnd',\n 'otransitionend'\n ]\n });\n if ('child' === resizeFrom) {\n manageTriggerEvent({\n method: method,\n eventType: 'IFrame Resized',\n eventName: 'resize'\n });\n }\n }\n\n function checkCalcMode(calcMode, calcModeDefault, modes, type) {\n if (calcModeDefault !== calcMode) {\n if (!(calcMode in modes)) {\n warn(\n calcMode + ' is not a valid option for ' + type + 'CalculationMethod.'\n );\n calcMode = calcModeDefault;\n }\n log(type + ' calculation method set to \"' + calcMode + '\"');\n }\n\n return calcMode;\n }\n\n function checkHeightMode() {\n heightCalcMode = checkCalcMode(\n heightCalcMode,\n heightCalcModeDefault,\n getHeight,\n 'height'\n );\n }\n\n function checkWidthMode() {\n widthCalcMode = checkCalcMode(\n widthCalcMode,\n widthCalcModeDefault,\n getWidth,\n 'width'\n );\n }\n\n function startEventListeners() {\n if (true === autoResize) {\n manageEventListeners('add');\n setupMutationObserver();\n } else {\n log('Auto Resize disabled');\n }\n }\n\n function stopMsgsToParent() {\n log('Disable outgoing messages');\n sendPermit = false;\n }\n\n function removeMsgListener() {\n log('Remove event listener: Message');\n removeEventListener(window, 'message', receiver);\n }\n\n function disconnectMutationObserver() {\n if (null !== bodyObserver) {\n /* istanbul ignore next */ // Not testable in PhantonJS\n bodyObserver.disconnect();\n }\n }\n\n function stopEventListeners() {\n manageEventListeners('remove');\n disconnectMutationObserver();\n clearInterval(intervalTimer);\n }\n\n function teardown() {\n stopMsgsToParent();\n removeMsgListener();\n if (true === autoResize) stopEventListeners();\n }\n\n function injectClearFixIntoBodyElement() {\n var clearFix = document.createElement('div');\n clearFix.style.clear = 'both';\n clearFix.style.display = 'block'; //Guard against this having been globally redefined in CSS.\n document.body.appendChild(clearFix);\n }\n\n function setupInPageLinks() {\n function getPagePosition() {\n return {\n x:\n window.pageXOffset !== undefined\n ? window.pageXOffset\n : document.documentElement.scrollLeft,\n y:\n window.pageYOffset !== undefined\n ? window.pageYOffset\n : document.documentElement.scrollTop\n };\n }\n\n function getElementPosition(el) {\n var elPosition = el.getBoundingClientRect(),\n pagePosition = getPagePosition();\n\n return {\n x: parseInt(elPosition.left, 10) + parseInt(pagePosition.x, 10),\n y: parseInt(elPosition.top, 10) + parseInt(pagePosition.y, 10)\n };\n }\n\n function findTarget(location) {\n function jumpToTarget(target) {\n var jumpPosition = getElementPosition(target);\n\n log(\n 'Moving to in page link (#' +\n hash +\n ') at x: ' +\n jumpPosition.x +\n ' y: ' +\n jumpPosition.y\n );\n sendMsg(jumpPosition.y, jumpPosition.x, 'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n }\n\n var hash = location.split('#')[1] || location, //Remove # if present\n hashData = decodeURIComponent(hash),\n target =\n document.getElementById(hashData) ||\n document.getElementsByName(hashData)[0];\n\n if (undefined !== target) {\n jumpToTarget(target);\n } else {\n log(\n 'In page link (#' +\n hash +\n ') not found in iFrame, so sending to parent'\n );\n sendMsg(0, 0, 'inPageLink', '#' + hash);\n }\n }\n\n function checkLocationHash() {\n if ('' !== location.hash && '#' !== location.hash) {\n findTarget(location.href);\n }\n }\n\n function bindAnchors() {\n function setupLink(el) {\n function linkClicked(e) {\n e.preventDefault();\n\n /*jshint validthis:true */\n findTarget(this.getAttribute('href'));\n }\n\n if ('#' !== el.getAttribute('href')) {\n addEventListener(el, 'click', linkClicked);\n }\n }\n\n Array.prototype.forEach.call(\n document.querySelectorAll('a[href^=\"#\"]'),\n setupLink\n );\n }\n\n function bindLocationHash() {\n addEventListener(window, 'hashchange', checkLocationHash);\n }\n\n function initCheck() {\n //check if page loaded with location hash after init resize\n setTimeout(checkLocationHash, eventCancelTimer);\n }\n\n function enableInPageLinks() {\n /* istanbul ignore else */ // Not testable in phantonJS\n if (Array.prototype.forEach && document.querySelectorAll) {\n log('Setting up location.hash handlers');\n bindAnchors();\n bindLocationHash();\n initCheck();\n } else {\n warn(\n 'In page linking not fully supported in this browser! (See README.md for IE8 workaround)'\n );\n }\n }\n\n if (inPageLinks.enable) {\n enableInPageLinks();\n } else {\n log('In page linking not enabled');\n }\n\n return {\n findTarget: findTarget\n };\n }\n\n function setupPublicMethods() {\n log('Enable public methods');\n\n win.parentIFrame = {\n autoResize: function autoResizeF(resize) {\n if (true === resize && false === autoResize) {\n autoResize = true;\n startEventListeners();\n //sendSize('autoResize','Auto Resize enabled');\n } else if (false === resize && true === autoResize) {\n autoResize = false;\n stopEventListeners();\n }\n\n return autoResize;\n },\n\n close: function closeF() {\n sendMsg(0, 0, 'close');\n teardown();\n },\n\n getId: function getIdF() {\n return myID;\n },\n\n getPageInfo: function getPageInfoF(callback) {\n if ('function' === typeof callback) {\n pageInfoCallback = callback;\n sendMsg(0, 0, 'pageInfo');\n } else {\n pageInfoCallback = function() {};\n sendMsg(0, 0, 'pageInfoStop');\n }\n },\n\n moveToAnchor: function moveToAnchorF(hash) {\n inPageLinks.findTarget(hash);\n },\n\n reset: function resetF() {\n resetIFrame('parentIFrame.reset');\n },\n\n scrollTo: function scrollToF(x, y) {\n sendMsg(y, x, 'scrollTo'); // X&Y reversed at sendMsg uses height/width\n },\n\n scrollToOffset: function scrollToF(x, y) {\n sendMsg(y, x, 'scrollToOffset'); // X&Y reversed at sendMsg uses height/width\n },\n\n sendMessage: function sendMessageF(msg, targetOrigin) {\n sendMsg(0, 0, 'message', JSON.stringify(msg), targetOrigin);\n },\n\n setHeightCalculationMethod: function setHeightCalculationMethodF(\n heightCalculationMethod\n ) {\n heightCalcMode = heightCalculationMethod;\n checkHeightMode();\n },\n\n setWidthCalculationMethod: function setWidthCalculationMethodF(\n widthCalculationMethod\n ) {\n widthCalcMode = widthCalculationMethod;\n checkWidthMode();\n },\n\n setTargetOrigin: function setTargetOriginF(targetOrigin) {\n log('Set targetOrigin: ' + targetOrigin);\n targetOriginDefault = targetOrigin;\n },\n\n size: function sizeF(customHeight, customWidth) {\n var valString =\n '' +\n (customHeight ? customHeight : '') +\n (customWidth ? ',' + customWidth : '');\n //lockTrigger();\n sendSize(\n 'size',\n 'parentIFrame.size(' + valString + ')',\n customHeight,\n customWidth\n );\n }\n };\n }\n\n function initInterval() {\n if (0 !== interval) {\n log('setInterval: ' + interval + 'ms');\n intervalTimer = setInterval(function() {\n sendSize('interval', 'setInterval: ' + interval);\n }, Math.abs(interval));\n }\n } //Not testable in PhantomJS\n\n /* istanbul ignore next */ function setupBodyMutationObserver() {\n function addImageLoadListners(mutation) {\n function addImageLoadListener(element) {\n if (false === element.complete) {\n log('Attach listeners to ' + element.src);\n element.addEventListener('load', imageLoaded, false);\n element.addEventListener('error', imageError, false);\n elements.push(element);\n }\n }\n\n if (mutation.type === 'attributes' && mutation.attributeName === 'src') {\n addImageLoadListener(mutation.target);\n } else if (mutation.type === 'childList') {\n Array.prototype.forEach.call(\n mutation.target.querySelectorAll('img'),\n addImageLoadListener\n );\n }\n }\n\n function removeFromArray(element) {\n elements.splice(elements.indexOf(element), 1);\n }\n\n function removeImageLoadListener(element) {\n log('Remove listeners from ' + element.src);\n element.removeEventListener('load', imageLoaded, false);\n element.removeEventListener('error', imageError, false);\n removeFromArray(element);\n }\n\n function imageEventTriggered(event, type, typeDesc) {\n removeImageLoadListener(event.target);\n sendSize(type, typeDesc + ': ' + event.target.src, undefined, undefined);\n }\n\n function imageLoaded(event) {\n imageEventTriggered(event, 'imageLoad', 'Image loaded');\n }\n\n function imageError(event) {\n imageEventTriggered(event, 'imageLoadFailed', 'Image load failed');\n }\n\n function mutationObserved(mutations) {\n sendSize(\n 'mutationObserver',\n 'mutationObserver: ' + mutations[0].target + ' ' + mutations[0].type\n );\n\n //Deal with WebKit asyncing image loading when tags are injected into the page\n mutations.forEach(addImageLoadListners);\n }\n\n function createMutationObserver() {\n var target = document.querySelector('body'),\n config = {\n attributes: true,\n attributeOldValue: false,\n characterData: true,\n characterDataOldValue: false,\n childList: true,\n subtree: true\n };\n\n observer = new MutationObserver(mutationObserved);\n\n log('Create body MutationObserver');\n observer.observe(target, config);\n\n return observer;\n }\n\n var elements = [],\n MutationObserver =\n window.MutationObserver || window.WebKitMutationObserver,\n observer = createMutationObserver();\n\n return {\n disconnect: function() {\n if ('disconnect' in observer) {\n log('Disconnect body MutationObserver');\n observer.disconnect();\n elements.forEach(removeImageLoadListener);\n }\n }\n };\n }\n\n function setupMutationObserver() {\n var forceIntervalTimer = 0 > interval; // Not testable in PhantomJS\n\n /* istanbul ignore if */ if (\n window.MutationObserver ||\n window.WebKitMutationObserver\n ) {\n if (forceIntervalTimer) {\n initInterval();\n } else {\n bodyObserver = setupBodyMutationObserver();\n }\n } else {\n log('MutationObserver not supported in this browser!');\n initInterval();\n }\n }\n\n // document.documentElement.offsetHeight is not reliable, so\n // we have to jump through hoops to get a better value.\n function getComputedStyle(prop, el) {\n /* istanbul ignore next */ //Not testable in PhantomJS\n function convertUnitsToPxForIE8(value) {\n var PIXEL = /^\\d+(px)?$/i;\n\n if (PIXEL.test(value)) {\n return parseInt(value, base);\n }\n\n var style = el.style.left,\n runtimeStyle = el.runtimeStyle.left;\n\n el.runtimeStyle.left = el.currentStyle.left;\n el.style.left = value || 0;\n value = el.style.pixelLeft;\n el.style.left = style;\n el.runtimeStyle.left = runtimeStyle;\n\n return value;\n }\n\n var retVal = 0;\n el = el || document.body; // Not testable in phantonJS\n\n /* istanbul ignore else */ if (\n 'defaultView' in document &&\n 'getComputedStyle' in document.defaultView\n ) {\n retVal = document.defaultView.getComputedStyle(el, null);\n retVal = null !== retVal ? retVal[prop] : 0;\n } else {\n //IE8\n retVal = convertUnitsToPxForIE8(el.currentStyle[prop]);\n }\n\n return parseInt(retVal, base);\n }\n\n function chkEventThottle(timer) {\n if (timer > throttledTimer / 2) {\n throttledTimer = 2 * timer;\n log('Event throttle increased to ' + throttledTimer + 'ms');\n }\n }\n\n //Idea from https://github.com/guardian/iframe-messenger\n function getMaxElement(side, elements) {\n var elementsLength = elements.length,\n elVal = 0,\n maxVal = 0,\n Side = capitalizeFirstLetter(side),\n timer = getNow();\n\n for (var i = 0; i < elementsLength; i++) {\n elVal =\n elements[i].getBoundingClientRect()[side] +\n getComputedStyle('margin' + Side, elements[i]);\n if (elVal > maxVal) {\n maxVal = elVal;\n }\n }\n\n timer = getNow() - timer;\n\n log('Parsed ' + elementsLength + ' HTML elements');\n log('Element position calculated in ' + timer + 'ms');\n\n chkEventThottle(timer);\n\n return maxVal;\n }\n\n function getAllMeasurements(dimention) {\n return [\n dimention.bodyOffset(),\n dimention.bodyScroll(),\n dimention.documentElementOffset(),\n dimention.documentElementScroll()\n ];\n }\n\n function getTaggedElements(side, tag) {\n function noTaggedElementsFound() {\n warn('No tagged elements (' + tag + ') found on page');\n return document.querySelectorAll('body *');\n }\n\n var elements = document.querySelectorAll('[' + tag + ']');\n\n if (0 === elements.length) noTaggedElementsFound();\n\n return getMaxElement(side, elements);\n }\n\n function getAllElements() {\n return document.querySelectorAll('body *');\n }\n\n var getHeight = {\n bodyOffset: function getBodyOffsetHeight() {\n return (\n document.body.offsetHeight +\n getComputedStyle('marginTop') +\n getComputedStyle('marginBottom')\n );\n },\n\n offset: function() {\n return getHeight.bodyOffset(); //Backwards compatability\n },\n\n bodyScroll: function getBodyScrollHeight() {\n return document.body.scrollHeight;\n },\n\n custom: function getCustomWidth() {\n return customCalcMethods.height();\n },\n\n documentElementOffset: function getDEOffsetHeight() {\n return document.documentElement.offsetHeight;\n },\n\n documentElementScroll: function getDEScrollHeight() {\n return document.documentElement.scrollHeight;\n },\n\n max: function getMaxHeight() {\n return Math.max.apply(null, getAllMeasurements(getHeight));\n },\n\n min: function getMinHeight() {\n return Math.min.apply(null, getAllMeasurements(getHeight));\n },\n\n grow: function growHeight() {\n return getHeight.max(); //Run max without the forced downsizing\n },\n\n lowestElement: function getBestHeight() {\n return Math.max(\n getHeight.bodyOffset() || getHeight.documentElementOffset(),\n getMaxElement('bottom', getAllElements())\n );\n },\n\n taggedElement: function getTaggedElementsHeight() {\n return getTaggedElements('bottom', 'data-iframe-height');\n }\n },\n getWidth = {\n bodyScroll: function getBodyScrollWidth() {\n return document.body.scrollWidth;\n },\n\n bodyOffset: function getBodyOffsetWidth() {\n return document.body.offsetWidth;\n },\n\n custom: function getCustomWidth() {\n return customCalcMethods.width();\n },\n\n documentElementScroll: function getDEScrollWidth() {\n return document.documentElement.scrollWidth;\n },\n\n documentElementOffset: function getDEOffsetWidth() {\n return document.documentElement.offsetWidth;\n },\n\n scroll: function getMaxWidth() {\n return Math.max(\n getWidth.bodyScroll(),\n getWidth.documentElementScroll()\n );\n },\n\n max: function getMaxWidth() {\n return Math.max.apply(null, getAllMeasurements(getWidth));\n },\n\n min: function getMinWidth() {\n return Math.min.apply(null, getAllMeasurements(getWidth));\n },\n\n rightMostElement: function rightMostElement() {\n return getMaxElement('right', getAllElements());\n },\n\n taggedElement: function getTaggedElementsWidth() {\n return getTaggedElements('right', 'data-iframe-width');\n }\n };\n\n function sizeIFrame(\n triggerEvent,\n triggerEventDesc,\n customHeight,\n customWidth\n ) {\n function resizeIFrame() {\n height = currentHeight;\n width = currentWidth;\n\n sendMsg(height, width, triggerEvent);\n }\n\n function isSizeChangeDetected() {\n function checkTolarance(a, b) {\n var retVal = Math.abs(a - b) <= tolerance;\n return !retVal;\n }\n\n currentHeight =\n undefined !== customHeight ? customHeight : getHeight[heightCalcMode]();\n currentWidth =\n undefined !== customWidth ? customWidth : getWidth[widthCalcMode]();\n\n return (\n checkTolarance(height, currentHeight) ||\n (calculateWidth && checkTolarance(width, currentWidth))\n );\n }\n\n function isForceResizableEvent() {\n return !(triggerEvent in { init: 1, interval: 1, size: 1 });\n }\n\n function isForceResizableCalcMode() {\n return (\n heightCalcMode in resetRequiredMethods ||\n (calculateWidth && widthCalcMode in resetRequiredMethods)\n );\n }\n\n function logIgnored() {\n log('No change in size detected');\n }\n\n function checkDownSizing() {\n if (isForceResizableEvent() && isForceResizableCalcMode()) {\n resetIFrame(triggerEventDesc);\n } else if (!(triggerEvent in { interval: 1 })) {\n logIgnored();\n }\n }\n\n var currentHeight, currentWidth;\n\n if (isSizeChangeDetected() || 'init' === triggerEvent) {\n lockTrigger();\n resizeIFrame();\n } else {\n checkDownSizing();\n }\n }\n\n var sizeIFrameThrottled = throttle(sizeIFrame);\n\n function sendSize(triggerEvent, triggerEventDesc, customHeight, customWidth) {\n function recordTrigger() {\n if (!(triggerEvent in { reset: 1, resetPage: 1, init: 1 })) {\n log('Trigger event: ' + triggerEventDesc);\n }\n }\n\n function isDoubleFiredEvent() {\n return triggerLocked && triggerEvent in doubleEventList;\n }\n\n if (!isDoubleFiredEvent()) {\n recordTrigger();\n if (triggerEvent === 'init') {\n sizeIFrame(triggerEvent, triggerEventDesc, customHeight, customWidth);\n } else {\n sizeIFrameThrottled(\n triggerEvent,\n triggerEventDesc,\n customHeight,\n customWidth\n );\n }\n } else {\n log('Trigger event cancelled: ' + triggerEvent);\n }\n }\n\n function lockTrigger() {\n if (!triggerLocked) {\n triggerLocked = true;\n log('Trigger event lock on');\n }\n clearTimeout(triggerLockedTimer);\n triggerLockedTimer = setTimeout(function() {\n triggerLocked = false;\n log('Trigger event lock off');\n log('--');\n }, eventCancelTimer);\n }\n\n function triggerReset(triggerEvent) {\n height = getHeight[heightCalcMode]();\n width = getWidth[widthCalcMode]();\n\n sendMsg(height, width, triggerEvent);\n }\n\n function resetIFrame(triggerEventDesc) {\n var hcm = heightCalcMode;\n heightCalcMode = heightCalcModeDefault;\n\n log('Reset trigger event: ' + triggerEventDesc);\n lockTrigger();\n triggerReset('reset');\n\n heightCalcMode = hcm;\n }\n\n function sendMsg(height, width, triggerEvent, msg, targetOrigin) {\n function setTargetOrigin() {\n if (undefined === targetOrigin) {\n targetOrigin = targetOriginDefault;\n } else {\n log('Message targetOrigin: ' + targetOrigin);\n }\n }\n\n function sendToParent() {\n var size = height + ':' + width,\n message =\n myID +\n ':' +\n size +\n ':' +\n triggerEvent +\n (undefined !== msg ? ':' + msg : '');\n\n log('Sending message to host page (' + message + ')');\n target.postMessage(msgID + message, targetOrigin);\n }\n\n if (true === sendPermit) {\n setTargetOrigin();\n sendToParent();\n }\n }\n\n function receiver(event) {\n var processRequestFromParent = {\n init: function initFromParent() {\n initMsg = event.data;\n target = event.source;\n\n init();\n firstRun = false;\n setTimeout(function() {\n initLock = false;\n }, eventCancelTimer);\n },\n\n reset: function resetFromParent() {\n if (!initLock) {\n log('Page size reset by host page');\n triggerReset('resetPage');\n } else {\n log('Page reset ignored by init');\n }\n },\n\n resize: function resizeFromParent() {\n sendSize('resizeParent', 'Parent window requested size check');\n },\n\n moveToAnchor: function moveToAnchorF() {\n inPageLinks.findTarget(getData());\n },\n inPageLink: function inPageLinkF() {\n this.moveToAnchor();\n }, //Backward compatability\n\n pageInfo: function pageInfoFromParent() {\n var msgBody = getData();\n log('PageInfoFromParent called from parent: ' + msgBody);\n pageInfoCallback(JSON.parse(msgBody));\n log(' --');\n },\n\n message: function messageFromParent() {\n var msgBody = getData();\n\n log('MessageCallback called from parent: ' + msgBody);\n messageCallback(JSON.parse(msgBody));\n log(' --');\n }\n };\n\n function isMessageForUs() {\n return msgID === ('' + event.data).substr(0, msgIdLen); //''+ Protects against non-string messages\n }\n\n function getMessageType() {\n return event.data.split(']')[1].split(':')[0];\n }\n\n function getData() {\n return event.data.substr(event.data.indexOf(':') + 1);\n }\n\n function isMiddleTier() {\n return (\n (!(typeof module !== 'undefined' && module.exports) &&\n 'iFrameResize' in window) ||\n ('jQuery' in window && 'iFrameResize' in window.jQuery.prototype)\n );\n }\n\n function isInitMsg() {\n //Test if this message is from a child below us. This is an ugly test, however, updating\n //the message format would break backwards compatibity.\n return event.data.split(':')[2] in { true: 1, false: 1 };\n }\n\n function callFromParent() {\n var messageType = getMessageType();\n\n if (messageType in processRequestFromParent) {\n processRequestFromParent[messageType]();\n } else if (!isMiddleTier() && !isInitMsg()) {\n warn('Unexpected message (' + event.data + ')');\n }\n }\n\n function processMessage() {\n if (false === firstRun) {\n callFromParent();\n } else if (isInitMsg()) {\n processRequestFromParent.init();\n } else {\n log(\n 'Ignored message of type \"' +\n getMessageType() +\n '\". Received before initialization.'\n );\n }\n }\n\n if (isMessageForUs()) {\n processMessage();\n }\n }\n\n //Normally the parent kicks things off when it detects the iFrame has loaded.\n //If this script is async-loaded, then tell parent page to retry init.\n function chkLateLoaded() {\n if ('loading' !== document.readyState) {\n window.parent.postMessage('[iFrameResizerChild]Ready', '*');\n }\n }\n\n addEventListener(window, 'message', receiver);\n addEventListener(window, 'readystatechange', chkLateLoaded);\n chkLateLoaded();\n\n \n})();\n","/*\n * File: iframeResizer.js\n * Desc: Force iframes to size to content.\n * Requires: iframeResizer.contentWindow.js to be loaded into the target frame.\n * Doc: https://github.com/davidjbradshaw/iframe-resizer\n * Author: David J. Bradshaw - dave@bradshaw.net\n * Contributor: Jure Mav - jure.mav@gmail.com\n * Contributor: Reed Dadoune - reed@dadoune.com\n */\n\n(function(undefined) {\n 'use strict';\n\n if (typeof window === 'undefined') return; // don't run for server side render\n\n var count = 0,\n logEnabled = false,\n hiddenCheckEnabled = false,\n msgHeader = 'message',\n msgHeaderLen = msgHeader.length,\n msgId = '[iFrameSizer]', //Must match iframe msg ID\n msgIdLen = msgId.length,\n pagePosition = null,\n requestAnimationFrame = window.requestAnimationFrame,\n resetRequiredMethods = {\n max: 1,\n scroll: 1,\n bodyScroll: 1,\n documentElementScroll: 1\n },\n settings = {},\n timer = null,\n logId = 'Host Page',\n defaults = {\n autoResize: true,\n bodyBackground: null,\n bodyMargin: null,\n bodyMarginV1: 8,\n bodyPadding: null,\n checkOrigin: true,\n inPageLinks: false,\n enablePublicMethods: true,\n heightCalculationMethod: 'bodyOffset',\n id: 'iFrameResizer',\n interval: 32,\n log: false,\n maxHeight: Infinity,\n maxWidth: Infinity,\n minHeight: 0,\n minWidth: 0,\n resizeFrom: 'parent',\n scrolling: false,\n sizeHeight: true,\n sizeWidth: false,\n warningTimeout: 5000,\n tolerance: 0,\n widthCalculationMethod: 'scroll',\n closedCallback: function() {},\n initCallback: function() {},\n messageCallback: function() {\n warn('MessageCallback function not defined');\n },\n resizedCallback: function() {},\n scrollCallback: function() {\n return true;\n }\n };\n\n function getMutationObserver() {\n return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n }\n\n function addEventListener(obj, evt, func) {\n /* istanbul ignore else */ // Not testable in PhantonJS\n if ('addEventListener' in window) {\n obj.addEventListener(evt, func, false);\n } else if ('attachEvent' in window) {\n //IE\n obj.attachEvent('on' + evt, func);\n }\n }\n\n function removeEventListener(el, evt, func) {\n /* istanbul ignore else */ // Not testable in phantonJS\n if ('removeEventListener' in window) {\n el.removeEventListener(evt, func, false);\n } else if ('detachEvent' in window) {\n //IE\n el.detachEvent('on' + evt, func);\n }\n }\n\n function setupRequestAnimationFrame() {\n var vendors = ['moz', 'webkit', 'o', 'ms'],\n x;\n\n // Remove vendor prefixing if prefixed and break early if not\n for (x = 0; x < vendors.length && !requestAnimationFrame; x += 1) {\n requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\n }\n\n if (!requestAnimationFrame) {\n log('setup', 'RequestAnimationFrame not supported');\n }\n }\n\n function getMyID(iframeId) {\n var retStr = 'Host page: ' + iframeId;\n\n if (window.top !== window.self) {\n if (window.parentIFrame && window.parentIFrame.getId) {\n retStr = window.parentIFrame.getId() + ': ' + iframeId;\n } else {\n retStr = 'Nested host page: ' + iframeId;\n }\n }\n\n return retStr;\n }\n\n function formatLogHeader(iframeId) {\n return msgId + '[' + getMyID(iframeId) + ']';\n }\n\n function isLogEnabled(iframeId) {\n return settings[iframeId] ? settings[iframeId].log : logEnabled;\n }\n\n function log(iframeId, msg) {\n output('log', iframeId, msg, isLogEnabled(iframeId));\n }\n\n function info(iframeId, msg) {\n output('info', iframeId, msg, isLogEnabled(iframeId));\n }\n\n function warn(iframeId, msg) {\n output('warn', iframeId, msg, true);\n }\n\n function output(type, iframeId, msg, enabled) {\n if (true === enabled && 'object' === typeof window.console) {\n console[type](formatLogHeader(iframeId), msg);\n }\n }\n\n function iFrameListener(event) {\n function resizeIFrame() {\n function resize() {\n setSize(messageData);\n setPagePosition(iframeId);\n callback('resizedCallback', messageData);\n }\n\n ensureInRange('Height');\n ensureInRange('Width');\n\n syncResize(resize, messageData, 'init');\n }\n\n function processMsg() {\n var data = msg.substr(msgIdLen).split(':');\n\n return {\n iframe: settings[data[0]] && settings[data[0]].iframe,\n id: data[0],\n height: data[1],\n width: data[2],\n type: data[3]\n };\n }\n\n function ensureInRange(Dimension) {\n var max = Number(settings[iframeId]['max' + Dimension]),\n min = Number(settings[iframeId]['min' + Dimension]),\n dimension = Dimension.toLowerCase(),\n size = Number(messageData[dimension]);\n\n log(\n iframeId,\n 'Checking ' + dimension + ' is in range ' + min + '-' + max\n );\n\n if (size < min) {\n size = min;\n log(iframeId, 'Set ' + dimension + ' to min value');\n }\n\n if (size > max) {\n size = max;\n log(iframeId, 'Set ' + dimension + ' to max value');\n }\n\n messageData[dimension] = '' + size;\n }\n\n function isMessageFromIFrame() {\n function checkAllowedOrigin() {\n function checkList() {\n var i = 0,\n retCode = false;\n\n log(\n iframeId,\n 'Checking connection is from allowed list of origins: ' +\n checkOrigin\n );\n\n for (; i < checkOrigin.length; i++) {\n if (checkOrigin[i] === origin) {\n retCode = true;\n break;\n }\n }\n return retCode;\n }\n\n function checkSingle() {\n var remoteHost = settings[iframeId] && settings[iframeId].remoteHost;\n log(iframeId, 'Checking connection is from: ' + remoteHost);\n return origin === remoteHost;\n }\n\n return checkOrigin.constructor === Array ? checkList() : checkSingle();\n }\n\n var origin = event.origin,\n checkOrigin = settings[iframeId] && settings[iframeId].checkOrigin;\n\n if (checkOrigin && '' + origin !== 'null' && !checkAllowedOrigin()) {\n throw new Error(\n 'Unexpected message received from: ' +\n origin +\n ' for ' +\n messageData.iframe.id +\n '. Message was: ' +\n event.data +\n '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.'\n );\n }\n\n return true;\n }\n\n function isMessageForUs() {\n return (\n msgId === ('' + msg).substr(0, msgIdLen) &&\n msg.substr(msgIdLen).split(':')[0] in settings\n ); //''+Protects against non-string msg\n }\n\n function isMessageFromMetaParent() {\n //Test if this message is from a parent above us. This is an ugly test, however, updating\n //the message format would break backwards compatibity.\n var retCode = messageData.type in { true: 1, false: 1, undefined: 1 };\n\n if (retCode) {\n log(iframeId, 'Ignoring init message from meta parent page');\n }\n\n return retCode;\n }\n\n function getMsgBody(offset) {\n return msg.substr(msg.indexOf(':') + msgHeaderLen + offset);\n }\n\n function forwardMsgFromIFrame(msgBody) {\n log(\n iframeId,\n 'MessageCallback passed: {iframe: ' +\n messageData.iframe.id +\n ', message: ' +\n msgBody +\n '}'\n );\n callback('messageCallback', {\n iframe: messageData.iframe,\n message: JSON.parse(msgBody)\n });\n log(iframeId, '--');\n }\n\n function getPageInfo() {\n var bodyPosition = document.body.getBoundingClientRect(),\n iFramePosition = messageData.iframe.getBoundingClientRect();\n\n return JSON.stringify({\n iframeHeight: iFramePosition.height,\n iframeWidth: iFramePosition.width,\n clientHeight: Math.max(\n document.documentElement.clientHeight,\n window.innerHeight || 0\n ),\n clientWidth: Math.max(\n document.documentElement.clientWidth,\n window.innerWidth || 0\n ),\n offsetTop: parseInt(iFramePosition.top - bodyPosition.top, 10),\n offsetLeft: parseInt(iFramePosition.left - bodyPosition.left, 10),\n scrollTop: window.pageYOffset,\n scrollLeft: window.pageXOffset\n });\n }\n\n function sendPageInfoToIframe(iframe, iframeId) {\n function debouncedTrigger() {\n trigger(\n 'Send Page Info',\n 'pageInfo:' + getPageInfo(),\n iframe,\n iframeId\n );\n }\n debounceFrameEvents(debouncedTrigger, 32, iframeId);\n }\n\n function startPageInfoMonitor() {\n function setListener(type, func) {\n function sendPageInfo() {\n if (settings[id]) {\n sendPageInfoToIframe(settings[id].iframe, id);\n } else {\n stop();\n }\n }\n\n ['scroll', 'resize'].forEach(function(evt) {\n log(id, type + evt + ' listener for sendPageInfo');\n func(window, evt, sendPageInfo);\n });\n }\n\n function stop() {\n setListener('Remove ', removeEventListener);\n }\n\n function start() {\n setListener('Add ', addEventListener);\n }\n\n var id = iframeId; //Create locally scoped copy of iFrame ID\n\n start();\n\n if (settings[id]) {\n settings[id].stopPageInfo = stop;\n }\n }\n\n function stopPageInfoMonitor() {\n if (settings[iframeId] && settings[iframeId].stopPageInfo) {\n settings[iframeId].stopPageInfo();\n delete settings[iframeId].stopPageInfo;\n }\n }\n\n function checkIFrameExists() {\n var retBool = true;\n\n if (null === messageData.iframe) {\n warn(iframeId, 'IFrame (' + messageData.id + ') not found');\n retBool = false;\n }\n return retBool;\n }\n\n function getElementPosition(target) {\n var iFramePosition = target.getBoundingClientRect();\n\n getPagePosition(iframeId);\n\n return {\n x: Math.floor(Number(iFramePosition.left) + Number(pagePosition.x)),\n y: Math.floor(Number(iFramePosition.top) + Number(pagePosition.y))\n };\n }\n\n function scrollRequestFromChild(addOffset) {\n /* istanbul ignore next */ //Not testable in Karma\n function reposition() {\n pagePosition = newPosition;\n scrollTo();\n log(iframeId, '--');\n }\n\n function calcOffset() {\n return {\n x: Number(messageData.width) + offset.x,\n y: Number(messageData.height) + offset.y\n };\n }\n\n function scrollParent() {\n if (window.parentIFrame) {\n window.parentIFrame['scrollTo' + (addOffset ? 'Offset' : '')](\n newPosition.x,\n newPosition.y\n );\n } else {\n warn(\n iframeId,\n 'Unable to scroll to requested position, window.parentIFrame not found'\n );\n }\n }\n\n var offset = addOffset\n ? getElementPosition(messageData.iframe)\n : { x: 0, y: 0 },\n newPosition = calcOffset();\n\n log(\n iframeId,\n 'Reposition requested from iFrame (offset x:' +\n offset.x +\n ' y:' +\n offset.y +\n ')'\n );\n\n if (window.top !== window.self) {\n scrollParent();\n } else {\n reposition();\n }\n }\n\n function scrollTo() {\n if (false !== callback('scrollCallback', pagePosition)) {\n setPagePosition(iframeId);\n } else {\n unsetPagePosition();\n }\n }\n\n function findTarget(location) {\n function jumpToTarget() {\n var jumpPosition = getElementPosition(target);\n\n log(\n iframeId,\n 'Moving to in page link (#' +\n hash +\n ') at x: ' +\n jumpPosition.x +\n ' y: ' +\n jumpPosition.y\n );\n pagePosition = {\n x: jumpPosition.x,\n y: jumpPosition.y\n };\n\n scrollTo();\n log(iframeId, '--');\n }\n\n function jumpToParent() {\n if (window.parentIFrame) {\n window.parentIFrame.moveToAnchor(hash);\n } else {\n log(\n iframeId,\n 'In page link #' +\n hash +\n ' not found and window.parentIFrame not found'\n );\n }\n }\n\n var hash = location.split('#')[1] || '',\n hashData = decodeURIComponent(hash),\n target =\n document.getElementById(hashData) ||\n document.getElementsByName(hashData)[0];\n\n if (target) {\n jumpToTarget();\n } else if (window.top !== window.self) {\n jumpToParent();\n } else {\n log(iframeId, 'In page link #' + hash + ' not found');\n }\n }\n\n function callback(funcName, val) {\n return chkCallback(iframeId, funcName, val);\n }\n\n function actionMsg() {\n if (settings[iframeId] && settings[iframeId].firstRun) firstRun();\n\n switch (messageData.type) {\n case 'close':\n if (settings[iframeId].closeRequestCallback)\n chkCallback(\n iframeId,\n 'closeRequestCallback',\n settings[iframeId].iframe\n );\n else closeIFrame(messageData.iframe);\n break;\n case 'message':\n forwardMsgFromIFrame(getMsgBody(6));\n break;\n case 'scrollTo':\n scrollRequestFromChild(false);\n break;\n case 'scrollToOffset':\n scrollRequestFromChild(true);\n break;\n case 'pageInfo':\n sendPageInfoToIframe(\n settings[iframeId] && settings[iframeId].iframe,\n iframeId\n );\n startPageInfoMonitor();\n break;\n case 'pageInfoStop':\n stopPageInfoMonitor();\n break;\n case 'inPageLink':\n findTarget(getMsgBody(9));\n break;\n case 'reset':\n resetIFrame(messageData);\n break;\n case 'init':\n resizeIFrame();\n callback('initCallback', messageData.iframe);\n break;\n default:\n resizeIFrame();\n }\n }\n\n function hasSettings(iframeId) {\n var retBool = true;\n\n if (!settings[iframeId]) {\n retBool = false;\n warn(\n messageData.type +\n ' No settings for ' +\n iframeId +\n '. Message was: ' +\n msg\n );\n }\n\n return retBool;\n }\n\n function iFrameReadyMsgReceived() {\n for (var iframeId in settings) {\n trigger(\n 'iFrame requested init',\n createOutgoingMsg(iframeId),\n document.getElementById(iframeId),\n iframeId\n );\n }\n }\n\n function firstRun() {\n if (settings[iframeId]) {\n settings[iframeId].firstRun = false;\n }\n }\n\n function clearWarningTimeout() {\n if (settings[iframeId]) {\n clearTimeout(settings[iframeId].msgTimeout);\n settings[iframeId].warningTimeout = 0;\n }\n }\n\n var msg = event.data,\n messageData = {},\n iframeId = null;\n\n if ('[iFrameResizerChild]Ready' === msg) {\n iFrameReadyMsgReceived();\n } else if (isMessageForUs()) {\n messageData = processMsg();\n iframeId = logId = messageData.id;\n if (settings[iframeId]) {\n settings[iframeId].loaded = true;\n }\n\n if (!isMessageFromMetaParent() && hasSettings(iframeId)) {\n log(iframeId, 'Received: ' + msg);\n\n if (checkIFrameExists() && isMessageFromIFrame()) {\n actionMsg();\n }\n }\n } else {\n info(iframeId, 'Ignored: ' + msg);\n }\n }\n\n function chkCallback(iframeId, funcName, val) {\n var func = null,\n retVal = null;\n\n if (settings[iframeId]) {\n func = settings[iframeId][funcName];\n\n if ('function' === typeof func) {\n retVal = func(val);\n } else {\n throw new TypeError(\n funcName + ' on iFrame[' + iframeId + '] is not a function'\n );\n }\n }\n\n return retVal;\n }\n\n function removeIframeListeners(iframe) {\n var iframeId = iframe.id;\n delete settings[iframeId];\n }\n\n function closeIFrame(iframe) {\n var iframeId = iframe.id;\n log(iframeId, 'Removing iFrame: ' + iframeId);\n\n try {\n // Catch race condition error with React\n if (iframe.parentNode) {\n iframe.parentNode.removeChild(iframe);\n }\n } catch (e) {}\n\n chkCallback(iframeId, 'closedCallback', iframeId);\n log(iframeId, '--');\n removeIframeListeners(iframe);\n }\n\n function getPagePosition(iframeId) {\n if (null === pagePosition) {\n pagePosition = {\n x:\n window.pageXOffset !== undefined\n ? window.pageXOffset\n : document.documentElement.scrollLeft,\n y:\n window.pageYOffset !== undefined\n ? window.pageYOffset\n : document.documentElement.scrollTop\n };\n log(\n iframeId,\n 'Get page position: ' + pagePosition.x + ',' + pagePosition.y\n );\n }\n }\n\n function setPagePosition(iframeId) {\n if (null !== pagePosition) {\n window.scrollTo(pagePosition.x, pagePosition.y);\n log(\n iframeId,\n 'Set page position: ' + pagePosition.x + ',' + pagePosition.y\n );\n unsetPagePosition();\n }\n }\n\n function unsetPagePosition() {\n pagePosition = null;\n }\n\n function resetIFrame(messageData) {\n function reset() {\n setSize(messageData);\n trigger('reset', 'reset', messageData.iframe, messageData.id);\n }\n\n log(\n messageData.id,\n 'Size reset requested by ' +\n ('init' === messageData.type ? 'host page' : 'iFrame')\n );\n getPagePosition(messageData.id);\n syncResize(reset, messageData, 'reset');\n }\n\n function setSize(messageData) {\n function setDimension(dimension) {\n if (!messageData.id) {\n log('undefined', 'messageData id not set');\n return;\n }\n messageData.iframe.style[dimension] = messageData[dimension] + 'px';\n log(\n messageData.id,\n 'IFrame (' +\n iframeId +\n ') ' +\n dimension +\n ' set to ' +\n messageData[dimension] +\n 'px'\n );\n }\n\n function chkZero(dimension) {\n //FireFox sets dimension of hidden iFrames to zero.\n //So if we detect that set up an event to check for\n //when iFrame becomes visible.\n\n /* istanbul ignore next */ //Not testable in PhantomJS\n if (!hiddenCheckEnabled && '0' === messageData[dimension]) {\n hiddenCheckEnabled = true;\n log(iframeId, 'Hidden iFrame detected, creating visibility listener');\n fixHiddenIFrames();\n }\n }\n\n function processDimension(dimension) {\n setDimension(dimension);\n chkZero(dimension);\n }\n\n var iframeId = messageData.iframe.id;\n\n if (settings[iframeId]) {\n if (settings[iframeId].sizeHeight) {\n processDimension('height');\n }\n if (settings[iframeId].sizeWidth) {\n processDimension('width');\n }\n }\n }\n\n function syncResize(func, messageData, doNotSync) {\n /* istanbul ignore if */ //Not testable in PhantomJS\n if (doNotSync !== messageData.type && requestAnimationFrame) {\n log(messageData.id, 'Requesting animation frame');\n requestAnimationFrame(func);\n } else {\n func();\n }\n }\n\n function trigger(calleeMsg, msg, iframe, id, noResponseWarning) {\n function postMessageToIFrame() {\n var target = settings[id] && settings[id].targetOrigin;\n log(\n id,\n '[' +\n calleeMsg +\n '] Sending msg to iframe[' +\n id +\n '] (' +\n msg +\n ') targetOrigin: ' +\n target\n );\n iframe.contentWindow.postMessage(msgId + msg, target);\n }\n\n function iFrameNotFound() {\n warn(id, '[' + calleeMsg + '] IFrame(' + id + ') not found');\n }\n\n function chkAndSend() {\n if (\n iframe &&\n 'contentWindow' in iframe &&\n null !== iframe.contentWindow\n ) {\n //Null test for PhantomJS\n postMessageToIFrame();\n } else {\n iFrameNotFound();\n }\n }\n\n function warnOnNoResponse() {\n function warning() {\n if (settings[id] && !settings[id].loaded && !errorShown) {\n errorShown = true;\n warn(\n id,\n 'IFrame has not responded within ' +\n settings[id].warningTimeout / 1000 +\n ' seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.'\n );\n }\n }\n\n if (\n !!noResponseWarning &&\n settings[id] &&\n !!settings[id].warningTimeout\n ) {\n settings[id].msgTimeout = setTimeout(\n warning,\n settings[id].warningTimeout\n );\n }\n }\n\n var errorShown = false;\n\n id = id || iframe.id;\n\n if (settings[id]) {\n chkAndSend();\n warnOnNoResponse();\n }\n }\n\n function createOutgoingMsg(iframeId) {\n return (\n iframeId +\n ':' +\n settings[iframeId].bodyMarginV1 +\n ':' +\n settings[iframeId].sizeWidth +\n ':' +\n settings[iframeId].log +\n ':' +\n settings[iframeId].interval +\n ':' +\n settings[iframeId].enablePublicMethods +\n ':' +\n settings[iframeId].autoResize +\n ':' +\n settings[iframeId].bodyMargin +\n ':' +\n settings[iframeId].heightCalculationMethod +\n ':' +\n settings[iframeId].bodyBackground +\n ':' +\n settings[iframeId].bodyPadding +\n ':' +\n settings[iframeId].tolerance +\n ':' +\n settings[iframeId].inPageLinks +\n ':' +\n settings[iframeId].resizeFrom +\n ':' +\n settings[iframeId].widthCalculationMethod\n );\n }\n\n function setupIFrame(iframe, options) {\n function setLimits() {\n function addStyle(style) {\n if (\n Infinity !== settings[iframeId][style] &&\n 0 !== settings[iframeId][style]\n ) {\n iframe.style[style] = settings[iframeId][style] + 'px';\n log(\n iframeId,\n 'Set ' + style + ' = ' + settings[iframeId][style] + 'px'\n );\n }\n }\n\n function chkMinMax(dimension) {\n if (\n settings[iframeId]['min' + dimension] >\n settings[iframeId]['max' + dimension]\n ) {\n throw new Error(\n 'Value for min' +\n dimension +\n ' can not be greater than max' +\n dimension\n );\n }\n }\n\n chkMinMax('Height');\n chkMinMax('Width');\n\n addStyle('maxHeight');\n addStyle('minHeight');\n addStyle('maxWidth');\n addStyle('minWidth');\n }\n\n function newId() {\n var id = (options && options.id) || defaults.id + count++;\n if (null !== document.getElementById(id)) {\n id = id + count++;\n }\n return id;\n }\n\n function ensureHasId(iframeId) {\n logId = iframeId;\n if ('' === iframeId) {\n iframe.id = iframeId = newId();\n logEnabled = (options || {}).log;\n logId = iframeId;\n log(\n iframeId,\n 'Added missing iframe ID: ' + iframeId + ' (' + iframe.src + ')'\n );\n }\n\n return iframeId;\n }\n\n function setScrolling() {\n log(\n iframeId,\n 'IFrame scrolling ' +\n (settings[iframeId] && settings[iframeId].scrolling\n ? 'enabled'\n : 'disabled') +\n ' for ' +\n iframeId\n );\n iframe.style.overflow =\n false === (settings[iframeId] && settings[iframeId].scrolling)\n ? 'hidden'\n : 'auto';\n switch (settings[iframeId] && settings[iframeId].scrolling) {\n case 'omit':\n break;\n case true:\n iframe.scrolling = 'yes';\n break;\n case false:\n iframe.scrolling = 'no';\n break;\n default:\n iframe.scrolling = settings[iframeId]\n ? settings[iframeId].scrolling\n : 'no';\n }\n }\n\n //The V1 iFrame script expects an int, where as in V2 expects a CSS\n //string value such as '1px 3em', so if we have an int for V2, set V1=V2\n //and then convert V2 to a string PX value.\n function setupBodyMarginValues() {\n if (\n 'number' ===\n typeof (settings[iframeId] && settings[iframeId].bodyMargin) ||\n '0' === (settings[iframeId] && settings[iframeId].bodyMargin)\n ) {\n settings[iframeId].bodyMarginV1 = settings[iframeId].bodyMargin;\n settings[iframeId].bodyMargin =\n '' + settings[iframeId].bodyMargin + 'px';\n }\n }\n\n function checkReset() {\n // Reduce scope of firstRun to function, because IE8's JS execution\n // context stack is borked and this value gets externally\n // changed midway through running this function!!!\n var firstRun = settings[iframeId] && settings[iframeId].firstRun,\n resetRequertMethod =\n settings[iframeId] &&\n settings[iframeId].heightCalculationMethod in resetRequiredMethods;\n\n if (!firstRun && resetRequertMethod) {\n resetIFrame({ iframe: iframe, height: 0, width: 0, type: 'init' });\n }\n }\n\n function setupIFrameObject() {\n if (Function.prototype.bind && settings[iframeId]) {\n //Ignore unpolyfilled IE8.\n settings[iframeId].iframe.iFrameResizer = {\n close: closeIFrame.bind(null, settings[iframeId].iframe),\n\n removeListeners: removeIframeListeners.bind(\n null,\n settings[iframeId].iframe\n ),\n\n resize: trigger.bind(\n null,\n 'Window resize',\n 'resize',\n settings[iframeId].iframe\n ),\n\n moveToAnchor: function(anchor) {\n trigger(\n 'Move to anchor',\n 'moveToAnchor:' + anchor,\n settings[iframeId].iframe,\n iframeId\n );\n },\n\n sendMessage: function(message) {\n message = JSON.stringify(message);\n trigger(\n 'Send Message',\n 'message:' + message,\n settings[iframeId].iframe,\n iframeId\n );\n }\n };\n }\n }\n\n //We have to call trigger twice, as we can not be sure if all\n //iframes have completed loading when this code runs. The\n //event listener also catches the page changing in the iFrame.\n function init(msg) {\n function iFrameLoaded() {\n trigger('iFrame.onload', msg, iframe, undefined, true);\n checkReset();\n }\n\n function createDestroyObserver(MutationObserver) {\n if (!iframe.parentNode) {\n return;\n }\n\n var destroyObserver = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n var removedNodes = Array.prototype.slice.call(mutation.removedNodes); // Transform NodeList into an Array\n removedNodes.forEach(function (removedNode) {\n if (removedNode === iframe) {\n closeIFrame(iframe);\n }\n });\n });\n });\n destroyObserver.observe(iframe.parentNode, {\n childList: true\n });\n }\n\n var MutationObserver = getMutationObserver();\n if (MutationObserver) {\n createDestroyObserver(MutationObserver);\n }\n\n addEventListener(iframe, 'load', iFrameLoaded);\n trigger('init', msg, iframe, undefined, true);\n }\n\n function checkOptions(options) {\n if ('object' !== typeof options) {\n throw new TypeError('Options is not an object');\n }\n }\n\n function copyOptions(options) {\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option)) {\n settings[iframeId][option] = options.hasOwnProperty(option)\n ? options[option]\n : defaults[option];\n }\n }\n }\n\n function getTargetOrigin(remoteHost) {\n return '' === remoteHost || 'file://' === remoteHost ? '*' : remoteHost;\n }\n\n function processOptions(options) {\n options = options || {};\n settings[iframeId] = {\n firstRun: true,\n iframe: iframe,\n remoteHost: iframe.src\n .split('/')\n .slice(0, 3)\n .join('/')\n };\n\n checkOptions(options);\n copyOptions(options);\n\n if (settings[iframeId]) {\n settings[iframeId].targetOrigin =\n true === settings[iframeId].checkOrigin\n ? getTargetOrigin(settings[iframeId].remoteHost)\n : '*';\n }\n }\n\n function beenHere() {\n return iframeId in settings && 'iFrameResizer' in iframe;\n }\n\n var iframeId = ensureHasId(iframe.id);\n\n if (!beenHere()) {\n processOptions(options);\n setScrolling();\n setLimits();\n setupBodyMarginValues();\n init(createOutgoingMsg(iframeId));\n setupIFrameObject();\n } else {\n warn(iframeId, 'Ignored iFrame, already setup.');\n }\n }\n\n function debouce(fn, time) {\n if (null === timer) {\n timer = setTimeout(function() {\n timer = null;\n fn();\n }, time);\n }\n }\n\n var frameTimer = {};\n function debounceFrameEvents(fn, time, frameId) {\n if (!frameTimer[frameId]) {\n frameTimer[frameId] = setTimeout(function() {\n frameTimer[frameId] = null;\n fn();\n }, time);\n }\n } //Not testable in PhantomJS\n\n /* istanbul ignore next */ function fixHiddenIFrames() {\n function checkIFrames() {\n function checkIFrame(settingId) {\n function chkDimension(dimension) {\n return (\n '0px' ===\n (settings[settingId] && settings[settingId].iframe.style[dimension])\n );\n }\n\n function isVisible(el) {\n return null !== el.offsetParent;\n }\n\n if (\n settings[settingId] &&\n isVisible(settings[settingId].iframe) &&\n (chkDimension('height') || chkDimension('width'))\n ) {\n trigger(\n 'Visibility change',\n 'resize',\n settings[settingId].iframe,\n settingId\n );\n }\n }\n\n for (var settingId in settings) {\n checkIFrame(settingId);\n }\n }\n\n function mutationObserved(mutations) {\n log(\n 'window',\n 'Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type\n );\n debouce(checkIFrames, 16);\n }\n\n function createMutationObserver() {\n var target = document.querySelector('body'),\n config = {\n attributes: true,\n attributeOldValue: false,\n characterData: true,\n characterDataOldValue: false,\n childList: true,\n subtree: true\n },\n observer = new MutationObserver(mutationObserved);\n\n observer.observe(target, config);\n }\n\n var MutationObserver = getMutationObserver();\n if (MutationObserver) {\n createMutationObserver();\n }\n }\n\n function resizeIFrames(event) {\n function resize() {\n sendTriggerMsg('Window ' + event, 'resize');\n }\n\n log('window', 'Trigger event: ' + event);\n debouce(resize, 16);\n } //Not testable in PhantomJS\n\n /* istanbul ignore next */ function tabVisible() {\n function resize() {\n sendTriggerMsg('Tab Visable', 'resize');\n }\n\n if ('hidden' !== document.visibilityState) {\n log('document', 'Trigger event: Visiblity change');\n debouce(resize, 16);\n }\n }\n\n function sendTriggerMsg(eventName, event) {\n function isIFrameResizeEnabled(iframeId) {\n return (\n settings[iframeId] &&\n 'parent' === settings[iframeId].resizeFrom &&\n settings[iframeId].autoResize &&\n !settings[iframeId].firstRun\n );\n }\n\n for (var iframeId in settings) {\n if (isIFrameResizeEnabled(iframeId)) {\n trigger(eventName, event, document.getElementById(iframeId), iframeId);\n }\n }\n }\n\n function setupEventListeners() {\n addEventListener(window, 'message', iFrameListener);\n\n addEventListener(window, 'resize', function() {\n resizeIFrames('resize');\n });\n\n addEventListener(document, 'visibilitychange', tabVisible);\n addEventListener(document, '-webkit-visibilitychange', tabVisible); //Andriod 4.4\n addEventListener(window, 'focusin', function() {\n resizeIFrames('focus');\n }); //IE8-9\n addEventListener(window, 'focus', function() {\n resizeIFrames('focus');\n });\n }\n\n function factory() {\n function init(options, element) {\n function chkType() {\n if (!element.tagName) {\n throw new TypeError('Object is not a valid DOM element');\n } else if ('IFRAME' !== element.tagName.toUpperCase()) {\n throw new TypeError(\n 'Expected